如何在Python中旋转Seaborn热图?

dev*_*ist 3 python heatmap axis-labels seaborn yaxis

seaborn.heatmap给出的默认设置

在此输入图像描述

  • x 轴从原点 0 开始向右增加
  • y 轴从原点 9 开始然后向上增加

与 相比,这很奇怪matplotlib.pyplot.pcolormesh,它给出了一个从原点 0 开始向上移动的 y 轴,就像我们直观地想要的那样,因为它只对原点为 (0,0) 而不是 (0,9 )!

如何使y轴heatmap也从原点0而不是9开始向上移动?(当然,同时相应地重新定向数据)

我尝试转置输入数据,但这看起来不正确并且轴没有改变。我不认为需要围绕 y 轴进行翻转,而是对热图进行简单的旋转。

vah*_*ndi 5

您可以使用以下命令翻转 y 轴ax.invert_yaxis()

import seaborn as sns
import numpy as np
np.random.seed(0)

sns.set_theme()
uniform_data = np.random.rand(10, 12)
ax = sns.heatmap(uniform_data)
ax.invert_yaxis()
Run Code Online (Sandbox Code Playgroud)

如果你想进行你描述的旋转,你必须首先转置矩阵:

import seaborn as sns
import numpy as np
np.random.seed(0)

sns.set_theme()
uniform_data = np.random.rand(10, 12)
ax = sns.heatmap(uniform_data.T)
ax.invert_yaxis()
Run Code Online (Sandbox Code Playgroud)

造成差异的原因是它们假设不同的坐标系。pcolormesh假设您想使用笛卡尔坐标访问元素,[x, y]并且它以您期望的方式显示它们。heatmap假设您想使用数组坐标 ie 访问元素[row, col],因此它提供的热图具有与将数组打印到控制台相同的布局。

为什么他们使用不同的坐标系?我会猜测,但我认为这是由于两个图书馆的年龄所致。matplotlib,特别是它的旧命令是来自 的端口Matlab,因此许多假设都是相同的。seaborn很晚才为Python开发,专门针对统计可视化,之后pandas就已经存在了。所以我猜测mwaskom选择的布局是为了复制将DataFrame其打印到屏幕上时的外观。