根据 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 显示颜色。
这是因为 min
和 max
值在您的数据帧 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)
我有以下数据框:
>>> 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 显示颜色。
这是因为 min
和 max
值在您的数据帧 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)