【问题标题】:Matplotlib / Seaborn: control line/row height of heatmapMatplotlib / Seaborn:热图的控制线/行高
【发布时间】:2018-07-05 16:49:53
【问题描述】:

我正在通过调用sns.heatmap() 使用 seaborn 生成热图。每个单元格的颜色基于行百分比,我想控制每行/行的高度。

为了说明,这是一个具有相同行高的热图:

地图包含每行的百分比值。我想根据底层计数的行总和来设置每一行的高度,以说明每一行的重要性。

代码:

pcts = data.apply(lambda x: x / float(x.sum()), axis=1)
sns.heatmap(data)

【问题讨论】:

    标签: pandas matplotlib seaborn


    【解决方案1】:

    seaborn.heatmap 无法创建不同大小的行。当然,您可以使用 matplotlib 创建热图。这将涉及创建具有所需间距的网格并在该网格上绘制值。

    import numpy as np;np.random.seed(1)
    import matplotlib.pyplot as plt
    
    # get some data
    a = np.random.rayleigh(3,111)
    h,_ = np.histogram(a)
    data = np.r_[[h]*10].T+np.random.rand(10,10)*11
    
    # produce scaling for data
    y = np.cumsum(np.append([0],np.sum(data, axis=1)))
    x = np.arange(data.shape[1]+1)
    X,Y = np.meshgrid(x,y)
    # plot heatmap
    im = plt.pcolormesh(X,Y,data)
    
    # set ticks
    ticks = y[:-1] + np.diff(y)/2
    plt.yticks(ticks, np.arange(len(ticks)))
    plt.xticks(np.arange(data.shape[1])+0.5,np.arange(data.shape[1]))
    # colorbar
    plt.colorbar(im)
    
    plt.show()
    

    【讨论】:

    • 这如我所愿,关键是y = np.cumsum(np.append([0],np.sum(data, axis=1)))
    猜你喜欢
    • 2017-08-21
    • 2018-11-23
    • 2020-09-22
    • 2019-10-21
    • 2020-05-11
    • 2017-09-29
    • 2019-10-03
    • 2021-03-14
    • 1970-01-01
    相关资源
    最近更新 更多