Одна вещь, которую вы можете очень легко изменить в своем коде, это то, что fontsizeвы используете для названий. Тем не менее, я предполагаю, что вы не просто хотите это сделать!
Некоторые альтернативы использованию fig.subplots_adjust(top=0.85):
Обычно tight_layout()неплохо справляется с позиционированием всего в хороших местах, чтобы они не перекрывались. Причина tight_layout()в этом случае не помогает, потому tight_layout()что не принимает во внимание fig.suptitle (). На GitHub есть открытый вопрос об этом: https://github.com/matplotlib/matplotlib/issues/829 [закрыт в 2014 году из-за необходимости полного менеджера геометрии - перенесен на https://github.com/matplotlib/matplotlib / Issues / 1109 ].
Если вы читаете ветку, есть решение вашей проблемы с участием GridSpec. Ключ должен оставить некоторое пространство в верхней части фигуры при вызове tight_layout, используя rectkwarg. Для вашей проблемы код становится:
Использование GridSpec
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
f = np.random.random(100)
g = np.random.random(100)
fig = plt.figure(1)
gs1 = gridspec.GridSpec(1, 2)
ax_list = [fig.add_subplot(ss) for ss in gs1]
ax_list[0].plot(f)
ax_list[0].set_title('Very Long Title 1', fontsize=20)
ax_list[1].plot(g)
ax_list[1].set_title('Very Long Title 2', fontsize=20)
fig.suptitle('Long Suptitle', fontsize=24)
gs1.tight_layout(fig, rect=[0, 0.03, 1, 0.95])
plt.show()
Результат:

Может быть GridSpec, это немного излишне для вас, или ваша настоящая проблема будет включать в себя гораздо больше вспомогательных сюжетов на гораздо большем холсте или другие сложности. Простой взлом состоит в том, чтобы просто использовать annotate()и зафиксировать координаты 'figure fraction'для имитации suptitle. Возможно, вам придется внести некоторые более точные корректировки, как только вы посмотрите на результат. Обратите внимание, что это второе решение не использует tight_layout().
Более простое решение (хотя может потребоваться его точная настройка)
fig = plt.figure(2)
ax1 = plt.subplot(121)
ax1.plot(f)
ax1.set_title('Very Long Title 1', fontsize=20)
ax2 = plt.subplot(122)
ax2.plot(g)
ax2.set_title('Very Long Title 2', fontsize=20)
# fig.suptitle('Long Suptitle', fontsize=24)
# Instead, do a hack by annotating the first axes with the desired
# string and set the positioning to 'figure fraction'.
fig.get_axes()[0].annotate('Long Suptitle', (0.5, 0.95),
xycoords='figure fraction', ha='center',
fontsize=24
)
plt.show()
Результат:

[Использование Python2.7.3 (64-разрядная matplotlibверсия ) и 1.2.0]