GridSpec与Python中的共享轴

另一个线程的解决schemebuild议使用gridspec.GridSpec而不是plt.subplots 。 但是,当我在子图之间共享坐标轴时,我通常使用如下的语法

  fig, axes = plt.subplots(N, 1, sharex='col', sharey=True, figsize=(3,18)) 

如何在使用GridSpec时指定sharexGridSpec

首先,对于原来的问题,有一个简单的解决方法,只要你稍微不准确就可以了。 调用tight_layout 之后 ,将子图的顶部范围重置为默认值:

 fig, axes = plt.subplots(ncols=2, sharey=True) plt.setp(axes, title='Test') fig.suptitle('An overall title', size=20) fig.tight_layout() fig.subplots_adjust(top=0.9) plt.show() 

在这里输入图像说明


但是,要回答你的问题,你需要创build一个稍微低一点的subplots来使用gridspec。 如果要复制像subplots这样的共享坐标轴的隐藏function,则需要手动执行此操作,方法是使用sharey参数,并用plt.setp(ax.get_yticklabels(), visible=False)

举个例子:

 import matplotlib.pyplot as plt from matplotlib import gridspec fig = plt.figure() gs = gridspec.GridSpec(1,2) ax1 = fig.add_subplot(gs[0]) ax2 = fig.add_subplot(gs[1], sharey=ax1) plt.setp(ax2.get_yticklabels(), visible=False) plt.setp([ax1, ax2], title='Test') fig.suptitle('An overall title', size=20) gs.tight_layout(fig, rect=[0, 0, 1, 0.97]) plt.show() 

在这里输入图像说明

Joe的select给了我一些问题:前者与直接使用figure.tight_layout而不是figure.set_tight_layout() ,后者与一些后端( UserWarning:tight_layout:回退到Agg渲染器 )有关。 但是乔的回答已经清除了我另一个紧凑的select。 这是接近OP的问题的结果:

 import matplotlib.pyplot as plt fig, axes = plt.subplots(nrows=2, ncols=1, sharex='col', sharey=True, gridspec_kw={'height_ratios': [2, 1]}, figsize=(4, 7)) fig.set_tight_layout({'rect': [0, 0, 1, 0.95], 'pad': 1.5, 'h_pad': 1.5}) plt.setp(axes, title='Test') fig.suptitle('An overall title', size=20) plt.show() 

在这里输入图像说明