GridSpec与Python中的共享轴
另一个线程的解决schemebuild议使用gridspec.GridSpec
而不是plt.subplots
。 但是,当我在子图之间共享坐标轴时,我通常使用如下的语法
fig, axes = plt.subplots(N, 1, sharex='col', sharey=True, figsize=(3,18))
如何在使用GridSpec
时指定sharex
和GridSpec
?
首先,对于原来的问题,有一个简单的解决方法,只要你稍微不准确就可以了。 在调用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()