如何使matplotlib热图子图的大小反映每个子图的数据中的行数?

时间:2018-06-08 23:12:40

标签: python matplotlib

我在python中使用matplotlib为我使用k-means聚类创建的不同聚类创建热图。现在我能够产生这个数字:

Heatmap

但我希望每个群集中的行数反映在热图的大小中,而不是将它们全部缩放到相同的大小。 GridSpec是正确的方法吗?这是我唯一可以尝试使用Google解决方案的方法,但它似乎更适合于您在网格上有子图并且您希望某个子图跨越网格上的多个行或列的情况。在这种情况下,我将创建一个包含数千行的网格,并告诉每个子图数跨越数百个。这仍然是最好的方法吗?

编辑:如果我的问题不清楚,我最终会尝试创建像这样的人物。请注意在左图中很容易看到群集E大于群集F:

enter image description here

1 个答案:

答案 0 :(得分:1)

GridSpec有一个参数height_ratios。您可以将其设置为热图的垂直形状列表。

import numpy as np
import matplotlib.pyplot as plt

data = [np.random.rand(n,8) for n in [3,7,10,4]]

fig, axes = plt.subplots(nrows=len(data), 
                         gridspec_kw=dict(height_ratios=[d.shape[0] for d in data]))

for ax, d in zip(axes, data):
    ax.imshow(d)
    ax.tick_params(labelbottom=False)

plt.show()

enter image description here