Jedną rzeczą, którą możesz bardzo łatwo zmienić w kodzie, jest to, fontsize
którego używasz do tytułów. Zakładam jednak, że nie tylko chcesz to zrobić!
Niektóre alternatywy dla używania fig.subplots_adjust(top=0.85)
:
Zwykle tight_layout()
wykonuje dobrą robotę, umieszczając wszystko w dobrych lokalizacjach, aby się nie nakładały. Przyczyna tight_layout()
nie pomaga w tym przypadku, ponieważ tight_layout()
nie uwzględnia fig.suptitle (). W GitHub istnieje otwarty problem: https://github.com/matplotlib/matplotlib/issues/829 [zamknięty w 2014 r. Ze względu na wymaganie pełnego menedżera geometrii - przeniesiony do https://github.com/matplotlib/matplotlib / Issues / 1109 ].
Jeśli czytasz wątek, możesz rozwiązać problem GridSpec
. Kluczem jest pozostawienie miejsca na górze figury podczas dzwonienia tight_layout
za pomocą rect
kwarg. W przypadku Twojego problemu kod staje się:
Korzystanie z 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()
Wynik:
Może GridSpec
to dla ciebie trochę przesada, albo twój prawdziwy problem będzie wiązał się z wieloma dodatkowymi wątkami na znacznie większym obszarze roboczym lub innymi komplikacjami. Prostym hakiem jest po prostu użycie annotate()
i zablokowanie współrzędnych 'figure fraction'
do naśladowania suptitle
. Być może jednak będziesz musiał dokonać drobniejszych korekt, gdy spojrzysz na wynik. Zauważ, że to drugie rozwiązanie ma nie wykorzystaniatight_layout()
.
Prostsze rozwiązanie (choć może wymagać dopracowania)
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()
Wynik:
[Korzystanie z wersji Python
2.7.3 (64-bitowej) i matplotlib
1.2.0]