子图产生不同高度的图

问题描述 投票:0回答:1

我想创建一个包含三个不同热图子图的图形。所有三个子印迹应每行对齐,因为它们具有共同的含义。但每个子图的宽度不同,当组合它们时,我得到不同的高度,因此行不对齐。

如何解决?

这是一个最小的代码示例和一张图片 [1]。

import numpy as np
from matplotlib.gridspec import GridSpec
rows = 4
first_cols = 5
second_cols = 1
third_cols = 3
first = np.random.randint(0,2,( rows , first_cols ))
second = np.random.randint(0,2,( rows , second_cols ))
third = np.random.randint(0,4,( rows , third_cols ))

fig=plt.figure()

gs=GridSpec(1,first_cols+second_cols+third_cols)

ax1=fig.add_subplot(gs[0,0:first_cols])
ax2=fig.add_subplot(gs[0,first_cols:first_cols+second_cols])
ax3=fig.add_subplot(gs[0,first_cols+second_cols:])
im1 = ax1.imshow(first)
im2 = ax2.imshow(second)
im3 = ax3.imshow(third)

plt.show()

1

python matplotlib
1个回答
0
投票

通过将轴放置在多个

GridSpec
列上,它们会合并列之间间隙的宽度,因此比您想要的更宽(因此更高)。 您可以只用三列不同宽度的列来创建您的
GridSpec

gs=GridSpec(1, 3, width_ratios=[first_cols, second_cols, third_cols])

ax1=fig.add_subplot(gs[0,0])
ax2=fig.add_subplot(gs[0,1])
ax3=fig.add_subplot(gs[0,2])

enter image description here

不直接使用

GridSpec
的快捷方式是

fig, (ax1, ax2, ax3) = plt.subplots(ncols=3, width_ratios=[first_cols, second_cols, third_cols])
© www.soinside.com 2019 - 2024. All rights reserved.