【问题标题】:Seaborn heatmap colors are reversedSeaborn 热图颜色反转
【发布时间】:2018-05-09 16:28:18
【问题描述】:

我正在使用我的 Apple 计算机上的代码从 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')

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

然后,我将代码放入带有 ubuntu 映像的 docker 容器中,并安装相同版本的 seaborn。唯一的区别是我需要添加一个matplotlib配置,这样TCL就不会尖叫了:

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

我得到一个看起来像这样的热图(我使用相同的代码和相同的 pandas 数据框):

我无法找到颜色渐变反转的原因,如果您有任何想法,我很想听听。

谢谢!

【问题讨论】:

  • 确保在这两种情况下使用相同的 seaborn 版本,默认颜色图最近发生了变化。尽管如此,它看起来有点奇怪,因为颜色栏中显示的颜色在热图图像中不存在(好像缩放改变了)。
  • 哦,但第一张图片也是如此 - 这是因为图片被裁剪了。
  • 是的,抱歉图片被裁剪了

标签: pandas matplotlib seaborn


【解决方案1】:

默认颜色图已更改为'rocket',用于 Seaborn 0.8 版本的顺序数据,请参阅the release notes。颜色图现在看起来像这样:

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

【讨论】:

  • 感谢您的回答!有没有一种简单的方法可以说最低值得到最亮的颜色,而最高值得到最暗的颜色?
  • 如果你想反转一个颜色图,你可以将_r附加到它的名字——所以在'rocket'颜色图的情况下你可以这样做:cmap='rocket_r'
  • 如果想用新数据重新生成热图,但需要让它看起来像旧的一样,应该使用什么名称来获取旧的颜色图?
  • 在使用 sns.cubehelix_palette(light=.95, as_cmap=True) 绘制 0.8 个非发散数据之前 - 您可以将其传递给 cmap 参数。我现在已经更新了答案。
猜你喜欢
  • 2018-05-07
  • 1970-01-01
  • 2017-07-19
  • 1970-01-01
  • 2020-10-21
  • 1970-01-01
  • 2020-12-03
  • 1970-01-01
  • 2015-04-06
相关资源
最近更新 更多