设置相同大小的子图(或gridspec)

时间:2017-08-08 06:04:41

标签: python matplotlib

我使用gridspec绘制两个数字:

fig = plt.figure(num=2,figsize=(5,2))
gs = gridspec.GridSpec(1, 2, width_ratios=[1,1])
ax0 = plt.subplot(gs[0])
ax1 = plt.subplot(gs[1])

ax0.imshow(ROI,'gray')

map1 = ax1.imshow(z,cmap=cm.YlOrRd)
divider1 = make_axes_locatable(ax1)  
cax1 = divider1.append_axes("right", size="5%", pad=0.05)
cbar1 = plt.colorbar(map1, cax=cax1)

ROIz预先定义了相同的尺寸。 但是它们的尺寸略有不同。

我想把它做成相同的尺寸:

enter image description here

如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

问题是你在/1中将两个数字的宽度固定为相同,然后将颜色条添加到第二个绘图中,该绘图占用了一些宽度(5%加上填充)。由于gridspec的宽高比为1:1,因此宽度的变化也会改变图形的高度。

避免这种情况的最简单方法是在宽度比中考虑颜色条的额外宽度:

imshow

这将产生以下情节:

enter image description here

您也可以使用import numpy as np import matplotlib.pyplot as plt import matplotlib.gridspec as gridspec from mpl_toolkits.axes_grid1 import make_axes_locatable # Random test data: ROI = np.random.rand(250, 150) z = np.random.rand(250, 150) fig = plt.figure(num=2,figsize=(4,2)) gs = gridspec.GridSpec(1, 2, width_ratios=[1,1.08]) ax0 = plt.subplot(gs[0]) ax1 = plt.subplot(gs[1]) ax0.imshow(ROI,'gray') map1 = ax1.imshow(z,cmap=plt.cm.YlOrRd) divider1 = make_axes_locatable(ax1) cax1 = divider1.append_axes("right", size="5%", pad="3%") cbar1 = plt.colorbar(map1, cax=cax1) plt.show()

为色条添加第三个轴来避免这种情况
gridspec

这给出了:

enter image description here

这可能更灵活,但也需要更多地调整填充和尺寸。