我想创建一个包含三个不同热图子图的图形。所有三个子印迹应每行对齐,因为它们具有共同的含义。但每个子图的宽度不同,当组合它们时,我得到不同的高度,因此行不对齐。
如何解决?
这是一个最小的代码示例和一张图片 [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()
通过将轴放置在多个
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])
不直接使用
GridSpec
的快捷方式是
fig, (ax1, ax2, ax3) = plt.subplots(ncols=3, width_ratios=[first_cols, second_cols, third_cols])