Seaborn热力图颜色被反转

3
我正在使用类似以下代码在我的苹果电脑上从pandas数据框生成热力图。
import matplotlib.pyplot as plt
import seaborn as sns

fig, ax = plt.subplots(figsize=(14,14))
sns.set(font_scale=1.4)
sns_plot = sns.heatmap(df, annot=True, linewidths=.5, fmt='g', ax=ax).set_yticklabels(ax.get_yticklabels(), rotation=0)
ax.set_ylabel('Product')
ax.set_xlabel('Manufacturer')
ax.xaxis.set_ticks_position('top')
ax.xaxis.set_label_position('top')

fig.savefig('output.png')

我得到了一个像这样的热力图:

enter image description here

然后,我将我的代码放入一个带有ubuntu镜像的docker容器中,并安装相同版本的seaborn。唯一的区别是我需要添加一个matplotlib配置,以便TCL不会出错:

import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import seaborn as sns

我使用相同的代码和相同的 pandas 数据帧,得到了如下的热力图:

enter image description here

我不知道颜色渐变为什么被翻转了,如果您有任何想法,请告诉我。
谢谢!

请确保两种情况下使用相同的seaborn版本,因为默认颜色映射最近已更改。尽管如此,在色条中显示的颜色与热图图像中的颜色不相同(好像缩放发生了变化),看起来有点奇怪。 - mmagnuski
哦,但第一张图片也是如此 - 这是因为这些图片被裁剪了。 - mmagnuski
是的,抱歉图片被裁剪了。 - mandok
1个回答

3
默认的色图已经在seaborn 0.8版本中更改为'rocket',适用于连续数据,详见发布说明。现在的色图如下所示:

您可以始终使用cmap参数并指定您喜欢使用的色图。例如,要获取非发散数据的0.8版之前的色图,请使用:cmap=sns.cubehelix_palette(light=.95, as_cmap=True)

谢谢您的回答!有没有一种简单的方法来表达最低值得到最亮的颜色,而最高值得到最暗的颜色? - mandok
2
如果您想要反转一个颜色映射,可以在其名称后面添加“_r” - 因此,在“'rocket'”颜色映射的情况下,您只需执行:cmap='rocket_r' - mmagnuski
如果想要用新的数据重新生成热力图,但需要它看起来像旧的一样,应该使用什么名称来获取旧的颜色映射表? - quant_dev
在0.8版本之前,非发散数据使用sns.cubehelix_palette(light=.95, as_cmap=True)进行绘制 - 您可以将其传递给cmap参数。我现在已经更新了答案。 - mmagnuski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接