【发布时间】:2022-01-01 23:47:14
【问题描述】:
sns.heatmap 中的 square 属性以奇怪的方式工作。当我使用随机数绘制热图并使用 square 属性时,它工作正常。
当我用我的矩阵绘制热图时,它会正确创建热图。
但是,当我使用 square 属性时,绘图会变成一个小正方形。
我不知道这里出了什么问题。
【问题讨论】:
标签: python matplotlib seaborn
sns.heatmap 中的 square 属性以奇怪的方式工作。当我使用随机数绘制热图并使用 square 属性时,它工作正常。
当我用我的矩阵绘制热图时,它会正确创建热图。
但是,当我使用 square 属性时,绘图会变成一个小正方形。
我不知道这里出了什么问题。
【问题讨论】:
标签: python matplotlib seaborn
好吧,square=True 的意思是:“将所有单元格显示为正方形”。将7x560 方块放入绘图区域的唯一方法是将高度降低大约80 的系数。换句话说:对于水平和垂直方向差异如此大的数据,强烈建议使用square=False。 Seaborn 在这里没有做错任何事情,它只是满足您的要求。
如果您希望热图是方形的(而不是单元格),您可以使用ax = sns.heatmap(data, square=False),然后使用ax.set_aspect(data.shape[1] / data.shape[0])。
这是一个例子:
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
data = np.random.randn(7, 560).cumsum(axis=1).cumsum(axis=0)
data -= data.min(axis=1, keepdims=True)
data /= data.max(axis=1, keepdims=True)
ax = sns.heatmap(data, cmap='turbo', cbar=True, xticklabels=50,
yticklabels=['Grumpy', 'Dopey', 'Doc', 'Happy', 'Bashful', 'Sneezy', 'Sleepy'])
ax.set_aspect(data.shape[1] / data.shape[0])
ax.tick_params(labelrotation=0)
plt.tight_layout()
plt.show()
【讨论】: