如何制作方形热图(总体图,而不是单元格)
How to make a square heatmap (overal plot, not the cells)
sns.heatmap
中的 square
属性以奇怪的方式工作。当我使用随机数绘制热图并使用 square 属性时,它工作正常。
当我用矩阵绘制热图时,它会正确创建热图。
但是,当我使用 square 属性时,绘图变成了一个小正方形。
我不知道这里出了什么问题。
好吧,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()
sns.heatmap
中的 square
属性以奇怪的方式工作。当我使用随机数绘制热图并使用 square 属性时,它工作正常。
当我用矩阵绘制热图时,它会正确创建热图。
但是,当我使用 square 属性时,绘图变成了一个小正方形。
我不知道这里出了什么问题。
好吧,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()