【问题标题】:How to make a square heatmap (overal plot, not the cells)如何制作方形热图(整体图,而不是单元格)
【发布时间】:2022-01-01 23:47:14
【问题描述】:

sns.heatmap 中的 square 属性以奇怪的方式工作。当我使用随机数绘制热图并使用 square 属性时,它工作正常。

当我用我的矩阵绘制热图时,它会正确创建热图。

但是,当我使用 square 属性时,绘图会变成一个小正方形。

我不知道这里出了什么问题。

【问题讨论】:

    标签: python matplotlib seaborn


    【解决方案1】:

    好吧,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()
    

    【讨论】:

      猜你喜欢
      • 2021-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-07
      • 2017-05-19
      • 2021-06-03
      • 1970-01-01
      • 2018-03-29
      相关资源
      最近更新 更多