Matplotlib / Seaborn:热图的控制线/行高

Posted

技术标签:

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

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

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

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

代码:

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

【问题讨论】:

【参考方案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)))

以上是关于Matplotlib / Seaborn:热图的控制线/行高的主要内容,如果未能解决你的问题,请参考以下文章

使用 seaborn 和 matplotlib 对热图进行注释的绘图

使用 Seaborn 和 Matplotlib 在热图和线图的共享子图中对齐 x 轴刻度

Seaborn 热图相关性不适合注释数字

Seaborn 热图未显示所有 xticks 和 yticks

如何为 seaborn 的热图或相关矩阵设置动画?

Matplotlib 和 Numpy - 创建日历热图