Ответ 1
Прежде всего, есть более легкое обходное решение для вашей исходной проблемы, если вы в порядке, слегка неточным. Просто reset верхняя часть подзаголовков по умолчанию после вызова 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()