293 votes

Matplotlib tight_layout() ne prend pas en compte le suptitle de la figure

Si j'ajoute un sous-titre à ma figure matplotlib, il est recouvert par les titres des sous-plots. Quelqu'un sait-il comment s'occuper facilement de cela ? J'ai essayé le tight_layout() mais cela ne fait qu'empirer les choses.

Exemple :

import numpy as np
import matplotlib.pyplot as plt

f = np.random.random(100)
g = np.random.random(100)
fig = plt.figure()
fig.suptitle('Long Suptitle', fontsize=24)
plt.subplot(121)
plt.plot(f)
plt.title('Very Long Title 1', fontsize=20)
plt.subplot(122)
plt.plot(g)
plt.title('Very Long Title 2', fontsize=20)
plt.tight_layout()
plt.show()

1voto

Brian Pollack Points 157

J'ai eu un problème similaire qui s'est présenté en utilisant tight_layout pour une très grande grille de parcelles (plus de 200 sous-plaques) et un rendu dans un notebook jupyter. J'ai fait une solution rapide qui place toujours suptitle à une certaine distance au-dessus de votre sous-plot supérieur :

import matplotlib.pyplot as plt

n_rows = 50
n_col = 4
fig, axs = plt.subplots(n_rows, n_cols)

#make plots ...

# define y position of suptitle to be ~20% of a row above the top row
y_title_pos = axs[0][0].get_position().get_points()[1][1]+(1/n_rows)*0.2
fig.suptitle('My Sup Title', y=y_title_pos)

Pour les sous-plots de taille variable, vous pouvez toujours utiliser cette méthode pour obtenir le sommet du sous-plot le plus haut, puis définir manuellement un montant supplémentaire à ajouter au suptitle.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X