GridSpec与Python中的共享轴


Answers:


75

首先,只要您可以稍微精确一点就可以,对于您的原始问题,有一个更简单的解决方法。只需调用后将子图的最高范围重置为默认值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()

在此处输入图片说明


但是,要回答您的问题,您需要在较低级别创建子图以使用gridspec。如果要像dos一样复制共享轴的隐藏,subplots则需要手动执行此操作,方法是使用shareyto参数,Figure.add_subplot并使用来隐藏重复的刻度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()

在此处输入图片说明


19

Joe的两个选择都给我带来了一些问题:前者与直接使用offigure.tight_layout而不是figure.set_tight_layout()and有关,后者与一些后端有关(UserWarning:ight_layout:退回到Agg渲染器)。但是,乔的回答无疑为我寻求另一种紧凑的选择扫清了道路。这是一个与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()

在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.