根据 cbar,seaborn 热图没有给出正确的颜色

seaborn heatmap does not give the correct colors according to the cbar

我有以下数据框:

>>>   control1    control2   control3
trt1  0.01         NaN        NaN
trt2  NaN          0.01       NaN
trt3  NaN          NaN        0.01

我创建了一个热图并定义了 0.01 和更低的值是否应该为红色。问题是他们得到了“p<.05”颜色:

ax= sns.heatmap(df, cmap=cmap,square=True,  linewidths=.3,linecolor="grey",cbar_kws={"shrink": .5})
colorbar = ax.collections[0].colorbar
colorbar.set_ticks([0.011,0.01])
colorbar.set_ticklabels(['p<0.05', 'p<0.01'])

我也尝试过将原始 df 中的值从 0.01 更改为 0.001,但它仍然将其着色为“鲑鱼”而不是 red:tab。

我的最终目标是获得正确的 cbar 显示颜色。

这是因为 minmax 值在您的数据帧 df 中相同。所以 sns.heatmap() 没有应用颜色图的范围,并且 select 颜色会在 cmap 的中间。如果您不更改数据框的输入,则必须将 cmap 切片为所需的颜色。由于您只想要一种颜色,因此您的 cmap 可以是一个包含一个字符串的列表,例如 cmap = ['red'].

对于您的示例,ax=sns.heatmap(df, cmap=['red'], square=True, linewidths=.3) 将这样绘制:

更新

作为解决方法,您可以使用 cmap 的最后一个值扩展 cmap-color-list。这应该看起来像这样 cmap = ['#DE0A0A'] + cmap.

一个简单的例子returns:

ax= sns.heatmap(df, cmap = ['#DE0A0A', '#DE0A0A', '#FF7C4B'], square=True,  linewidths=.3)