我尝试使用matplotlib在Python中创建一个2D热图,但在处理正值和负值时遇到了困难。我的数据集包含从非常高到非常低的正值和负值的值,这将是用对数标度表示的完美选择,但负值会是一个问题。所以我的想法是用不同的颜色标度表示它们。
具体来说,我想创建两个颜色条,一个使用对数刻度表示正值,另一个使用对数刻度表示负值的绝对值。正值应该用红色图案表示,而负值应该用蓝色图案表示。
下面是我目前为止的代码的简化版本:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors
# Generate some sample data
data = np.random.randn(10, 10)
datap = np.where(data>0, data, 0)
datan = np.abs(np.where(data<0, data, 0))
# Colorbar limits
vmin = np.abs(data).min()
vmax = np.abs(data).max()
# Create the figure and axis objects
fig, ax1 = plt.subplots()
# Create the heatmap with positive values
heatmap1 = ax1.imshow(datap, cmap='Reds', norm=matplotlib.colors.LogNorm(vmin=vmin, vmax=vmax))
# Create the second axis object for the negative values
ax2 = ax1.twinx()
# Create the heatmap for the negative values
heatmap2 = ax2.imshow(datan, cmap='Blues', norm=matplotlib.colors.LogNorm(vmin=vmin, vmax=vmax))
# Add colorbars for both heatmaps
cbar1 = fig.colorbar(heatmap1, ax=ax1, pad=0.3, label='Positive Values')
cbar2 = fig.colorbar(heatmap2, ax=ax2, pad=0.1, label='Absolute Values of Negative Values')
# Show the plot
plt.show()
字符串
但问题是我不明白如何分离颜色条,正如你在下面的结果中看到的:
我不确定如何正确添加第二个颜色条,或者可能是显示此数据集的更好方法。
1条答案
按热度按时间lzfw57am1#
您可以将红色条移动到蓝色条的右侧。只需更改红色条的位置。请注意,您还必须调整图的边距,以便两个颜色条都可以显示在图中。下面是一个示例:
字符串
的数据