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

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

使用sharex时如何指定shareyGridSpec

最佳答案

首先,只要您可以稍微精确一点就可以,对于您的原始问题,有一个更简单的解决方法。只需在调用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。如果要像subplots一样复制隐藏共享轴,则需要手动执行此操作,方法是使用 sharey 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()

09-29 22:26