我想在seaborn中绘制一个热图。我的代码如下:
plt.rcParams['font.size'] = 13
plt.rcParams['font.weight'] = 'bold'
my_dpi=96
fig, ax = plt.subplots(figsize=(800/my_dpi, 600/my_dpi), dpi=my_dpi, facecolor='black')
rdgn = sns.diverging_palette(h_neg=130, h_pos=10, s=99, l=55, sep=3)
sns.heatmap(df, cmap=rdgn, center=0.00, annot=True, fmt ='.2%', linewidths=1.3, linecolor='black', cbar=False, ax=ax)
plt.savefig('./image/image.png', dpi=96, facecolor='black')
其结果如下:
我希望0为白色,大于0的值为红色,小于0的值为绿色,但是热图的中心无效。
顺便说一下,如何设置颜色不对称。因为我的数据中的最小值是-0.34,最大值是1.31。我想设置0为白色,-0.34为最绿,1.31为最红。
2条答案
按热度按时间0yg35tkg1#
center
需要一些可以居中的东西。所以你需要一个颜色Map表来代替调色板,调色板是一个颜色列表。Seaborn为这种情况提供了as_cmap
参数。当然,您也可以使用任何其他matplotlib色彩Map表,或者指定您的自定义色彩Map表。
如果你不想让色彩Map表居中,而是想移动它的中间点,那么你不能使用
center
,而应该使用matplotlib.colors.DivergingNorm
。在这里,完整的色彩Map表将在绿色部分被压缩,在红色部分被拉伸。
laik7k3q2#
它看起来像seaborn的
vmin
和vmax
parameters。热图可能会帮助您:然而,似乎没有一种方法可以将非发散颜色贴图的中心也设置为0,所以如果这是一个必需的特性,那么你就不能使用seaborn.heatmap。你能做的最好的事情是设置
vmin = -vmax
,这至少会使中心为白色。看起来您可能有分歧的数据(没有硬限制),在这种情况下,您可以考虑使用divergent color maps之一(在这种情况下,您需要使用
center=0
,而不是vmin/vmax
)。