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 轴刻度