Très similaire à cette question, mais avec la différence que ma silhouette peut être aussi grande qu'elle doit l'être.
J'ai besoin de générer tout un tas de parcelles empilées verticalement dans matplotlib. Le résultat sera enregistré à l'aide de figsave et affiché sur une page Web, donc je me fiche de la hauteur de l'image finale tant que les sous-tracés sont espacés afin qu'ils ne se chevauchent pas.
Peu importe la taille que j'autorise, les sous-intrigues semblent toujours se chevaucher.
Mon code ressemble actuellement à
import matplotlib.pyplot as plt
import my_other_module
titles, x_lists, y_lists = my_other_module.get_data()
fig = plt.figure(figsize=(10,60))
for i, y_list in enumerate(y_lists):
plt.subplot(len(titles), 1, i)
plt.xlabel("Some X label")
plt.ylabel("Some Y label")
plt.title(titles[i])
plt.plot(x_lists[i],y_list)
fig.savefig('out.png', dpi=100)
python
matplotlib
mcstrother
la source
la source
tight_layout()
est hasardeux. J'ai essayé de comprendre ce qui est différent quand cela n'a aucun effet (de grandes marges inter-parcelles restent) - ce qui est souventsuptitle
) avec le titre de mon sous-tracé. Si quelqu'un rencontre un problème similaire, voici ce qui m'a aidé dans mon cas stackoverflow.com/a/45161551/11740420 . À savoir, lerect
paramètre detight_layout()
Vous pouvez utiliser
plt.subplots_adjust
pour modifier l'espacement entre les sous-parcelles (source)signature d'appel:
Les significations des paramètres (et les valeurs par défaut suggérées) sont:
Les valeurs par défaut réelles sont contrôlées par le fichier rc
la source
J'ai trouvé que subplots_adjust (hspace = 0,001) est ce qui a fini par fonctionner pour moi. Lorsque j'utilise space = None, il y a toujours un espace blanc entre chaque intrigue. Le mettre à quelque chose de très proche de zéro semble cependant les forcer à s'aligner. Ce que j'ai téléchargé ici n'est pas le morceau de code le plus élégant, mais vous pouvez voir comment fonctionne hspace.
la source
La méthode plt.subplots_adjust :
ou
La taille de l'image compte.
"J'ai essayé de jouer avec hspace, mais augmenter cela ne fait que rendre tous les graphiques plus petits sans résoudre le problème de chevauchement."
Ainsi, pour créer plus d'espace blanc et conserver la taille de la sous-parcelle, l'image totale doit être plus grande.
la source
plt.figure(figsize=(10, 7))
, la taille de l'image serait2000 x 1400
pixVous pouvez essayer le subplot_tool ()
la source
Similaire à
tight_layout
matplotlib maintenant (à partir de la version 2.2) fournitconstrained_layout
. Contrairement àtight_layout
, qui peut être appelé à tout moment dans le code pour une mise en page optimisée unique,constrained_layout
est une propriété, qui peut être active et optimisera la mise en page avant chaque étape de dessin.Par conséquent, il doit être activé avant ou pendant la création de la sous-parcelle, comme
figure(constrained_layout=True)
ousubplots(constrained_layout=True)
.Exemple:
constrained_layout peut également être défini via
rcParams
Voir la nouvelle entrée et le guide de mise en page contraint
la source
tight_layout
n'est pas fiabletight_layout()
a mieux fonctionnécontrained_layout
est plus lent, car comme vu dans cette réponse, il optimise la mise en page avant chaque étape du dessin .