【问题标题】:seaborn heatmap does not give the correct colors according to the cbar根据 cbar,seaborn 热图没有给出正确的颜色
【发布时间】:2021-05-19 03:08:11
【问题描述】:

我有以下数据框:

>>>   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,但它仍然将其着色为“鲑鱼”而不是红色:标签。

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

【问题讨论】:

    标签: python pandas seaborn heatmap colorbar


    【解决方案1】:

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

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

    更新

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

    一个简单的例子返回:

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

    【讨论】:

    • 感谢您的回答。我明白你的意思。但在您的示例中,cbaar 不显示两种颜色,因此颜色正确但我希望 0.01
    • 你知道你想要的颜色是hex 还是rgb
    • 是的,#DE0A0A 和##FA8072 应该相似
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-21
    • 1970-01-01
    • 2018-05-07
    相关资源
    最近更新 更多