我使用matplotlib制作图表的出版质量面板,对我来说重要的是轴之间的精确间距,包括其文本。当我所有的绘图都具有相同大小的字体并且包含(或不包含)xlabel / ylabel时,Gridspec和tightlayout(h_pad,w_pad)可以很好地工作。但是,如果面板中的一个图具有xlabel,则gridspec中的所有图都将以该距离(达到要求的填充所需的任何两个图之间的最大距离)隔开。考虑到文字,我希望地块之间的距离相等。我发现受约束的布局有时可以产生所需的行为,但是参数hspace和wspace控制图间距以难以理解的“子图大小的分数”为单位,并且我还没有弄清楚如何将wspace或hspace设置为产生我想要的精确的填充英寸数。 (我希望子图在绘图/文本之间具有相同的距离,而无论我制作不同的图形时,不管figsize或子图的尺寸如何。
我唯一的解决方案是为具有不同标签模式(例如带有或不带有xlabel)的图创建单独的网格规格,并使用带有rect参数的gs.tightlayout将它们放置在图上,同时考虑到我想要的间距-这还需要对齐gridspecs等。
对于子图之间(包括文本)之间一致的填充英寸,是否存在已知的解决方案?
import matplotlib as mpl
import matplotlib.pyplot as plt
# equal spacing
fig =plt.figure(figsize=(4,8), constrained_layout=False)
gs = mpl.gridspec.GridSpec(3, 1,
figure =fig,
height_ratios = [1,1,1,], hspace=0, wspace=0)
ax1 = fig.add_subplot(gs[0])
ax2 = fig.add_subplot(gs[1])
ax3 = fig.add_subplot(gs[2])
mpl.gridspec.rcParams['font.size'] = 72
# pad 1/4 an inch
gs.tight_layout(fig, h_pad=0.25, w_pad=0, pad = 0.25)
等距
fig =plt.figure(figsize=(4,8), constrained_layout=False)
gs = mpl.gridspec.GridSpec(3, 1,
figure =fig,
height_ratios = [1,1,1,], hspace=0, wspace=0)
ax1 = fig.add_subplot(gs[0])
ax2 = fig.add_subplot(gs[1])
ax3 = fig.add_subplot(gs[2])
ax2.set_xlabel('testing', fontsize = 20)
# setting this param so that I know how big the pad should be in inches (fonsize % units used for h_pad) 72 pt = 1 inch
mpl.gridspec.rcParams['font.size'] = 72
# pad 1/4 an inch
gs.tight_layout(fig, h_pad=0.25, w_pad=0, pad = 0.25)