如果单元格值高于 0.05,seaborn 不会在热图中给出颜色

seaborn don't give color in heatmap if cell value is higher than 0.05

我已经创建了热图,我想设置一个条件,如果单元格值高于 0.05,它将获得 cmap 中没有的特定颜色。 现在我所做的是定义 vmin 和 vmax,但问题是 vmax 仍然得到 0.5 或 0.6 值,我不能确定条件是否真的保持。

green=sns.light_palette("seagreen",reverse=True,as_cmap=True)
sns.set(rc={'figure.figsize':(18.7,3.27)})
sns.heatmap(fhtmp,square=True,cmap=green,linewidths=.5,vmin=0, vmax=0.05)

正如你在这里看到的,我真的不知道紫色的是等于 0.05 还是大于 0.05,我希望能够区分所以如果值更大大于 0.05 时,单元格将具有不同的颜色,例如白色或灰色。

编辑:我设法使用了一种面具,但绿色只有一种色调,面具有几种颜色。

sns.set(rc={'figure.figsize':(18.7,3.27)})
ax = sns.heatmap(fhtmp, cmap=green, center=0.8, square=True, 
                 linewidth=.5, vmin=0, vmax=0.05)
ax = sns.heatmap(fhtmp, mask=fhtmp < 0.053, cmap='Blues', square=True, annot=False, vmin=0.053, vmax=0.53, cbar=False, ax=ax)
plt.show()

所以这就是我得到的这仍然不是想要的结果

您可以在颜色图上使用 set_over()。例如。 green.set_over('lightgrey')。类似的功能是 set_under()set_bad().

extend keyword 可以在颜色栏中显示这些额外的颜色(默认为小三角形)。

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

green = sns.light_palette("seagreen", reverse=True, as_cmap=True)
green.set_over('tomato')
sns.set(rc={'figure.figsize': (18.7, 3.27)})
sns.heatmap(np.random.uniform(0, 0.07, (1, 20)), square=True, linewidths=.5, annot=True, fmt='.3f',
            cmap=green, vmin=0, vmax=0.05, cbar_kws={'extend': 'max'})
plt.show()