Une chose que vous pourriez changer très facilement dans votre code est celle que fontsize
vous utilisez pour les titres. Cependant, je vais supposer que vous ne voulez pas simplement faire ça!
Quelques alternatives à l'utilisation fig.subplots_adjust(top=0.85)
:
Fait généralement tight_layout()
un assez bon travail pour tout placer dans de bons endroits afin qu'ils ne se chevauchent pas. La raison tight_layout()
n'aide pas dans ce cas parce tight_layout()
que ne prend pas en compte fig.suptitle (). Il existe un problème ouvert à ce sujet sur GitHub: https://github.com/matplotlib/matplotlib/issues/829 [fermé en 2014 en raison de la nécessité d'un gestionnaire de géométrie complet - déplacé vers https://github.com/matplotlib/matplotlib / issues / 1109 ].
Si vous lisez le fil, il existe une solution à votre problème impliquant GridSpec
. La clé est de laisser un espace en haut de la figure lors de l'appel tight_layout
, en utilisant le rect
kwarg. Pour votre problème, le code devient:
Utilisation de 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()
Le résultat:
C'est peut GridSpec
- être un peu exagéré pour vous, ou votre vrai problème impliquera beaucoup plus de sous-intrigues sur une toile beaucoup plus grande, ou d'autres complications. Un hack simple consiste à simplement utiliser annotate()
et verrouiller les coordonnées 'figure fraction'
pour imiter a suptitle
. Cependant, vous devrez peut-être effectuer des ajustements plus fins une fois que vous aurez examiné la sortie. Notez que cette deuxième solution ne pas utiliser tight_layout()
.
Solution plus simple (mais peut-être besoin d'être affinée)
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()
Le résultat:
[Utilisation de Python
2.7.3 (64 bits) et matplotlib
1.2.0]