如何在 python 中旋转 Seaborn 热图?
How to rotate Seaborn heatmap in python?
seaborn.heatmap
的默认设置给出
- x轴从0的原点开始向着
对
- y轴从原点9开始向着
向上
这与 matplotlib.pyplot.pcolormesh
相比很奇怪,它给出了一个从原点 0 开始向上移动的 y 轴,就像我们直觉上想要的那样,因为只有原点是 ( 0,0), 而不是 (0,9)!
如何让heatmap
的y轴也从原点0开始向上移动,而不是从9开始? (当然相应地重新定位数据)
我尝试转置输入数据,但这看起来不对,轴也没有改变。我不认为需要围绕 y 轴翻转,而是热图的简单旋转。
您可以通过重置 yticklabels=[]
在左下角创建图表。这符合您的问题吗?
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, yticklabels=[9,8,7,6,5,4,3,2,1,0])
您可以使用 ax.invert_yaxis()
:
翻转 y-axis
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()
如果你想做你描述的旋转,你必须先转置矩阵:
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()
不同的原因是它们采用了不同的坐标系。 pcolormesh
假设您想使用笛卡尔坐标访问元素,即 [x, y]
并以您期望的方式显示它们。 heatmap
假设您想使用数组坐标访问元素,即 [row, col]
,因此它提供的热图具有与将数组打印到控制台相同的布局。
为什么他们使用不同的坐标系?我会猜测,但我认为这是由于 2 个图书馆的年龄。 matplotlib
,特别是它的旧命令是来自 Matlab
的端口,因此许多假设是相同的。 seaborn
是为 Python 开发的,专门针对统计可视化,并且在 pandas
已经存在之后。所以我猜 mwaskom 选择的布局是为了复制 DataFrame
打印到屏幕时的外观。
seaborn.heatmap
的默认设置给出
- x轴从0的原点开始向着 对
- y轴从原点9开始向着 向上
这与 matplotlib.pyplot.pcolormesh
相比很奇怪,它给出了一个从原点 0 开始向上移动的 y 轴,就像我们直觉上想要的那样,因为只有原点是 ( 0,0), 而不是 (0,9)!
如何让heatmap
的y轴也从原点0开始向上移动,而不是从9开始? (当然相应地重新定位数据)
我尝试转置输入数据,但这看起来不对,轴也没有改变。我不认为需要围绕 y 轴翻转,而是热图的简单旋转。
您可以通过重置 yticklabels=[]
在左下角创建图表。这符合您的问题吗?
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, yticklabels=[9,8,7,6,5,4,3,2,1,0])
您可以使用 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()
如果你想做你描述的旋转,你必须先转置矩阵:
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()
不同的原因是它们采用了不同的坐标系。 pcolormesh
假设您想使用笛卡尔坐标访问元素,即 [x, y]
并以您期望的方式显示它们。 heatmap
假设您想使用数组坐标访问元素,即 [row, col]
,因此它提供的热图具有与将数组打印到控制台相同的布局。
为什么他们使用不同的坐标系?我会猜测,但我认为这是由于 2 个图书馆的年龄。 matplotlib
,特别是它的旧命令是来自 Matlab
的端口,因此许多假设是相同的。 seaborn
是为 Python 开发的,专门针对统计可视化,并且在 pandas
已经存在之后。所以我猜 mwaskom 选择的布局是为了复制 DataFrame
打印到屏幕时的外观。