Sehr ähnlich zu dieser Frage, aber mit dem Unterschied, dass meine Figur so groß sein kann, wie sie sein muss.
Ich muss eine ganze Reihe von vertikal gestapelten Plots in matplotlib generieren. Das Ergebnis wird mit figsave gespeichert und auf einer Webseite angezeigt. Es ist mir also egal, wie hoch das endgültige Bild ist, solange die Unterzeichnungen voneinander beabstandet sind, damit sie sich nicht überlappen.
Egal wie groß ich die Figur sein lasse, die Nebenhandlungen scheinen sich immer zu überlappen.
Mein Code sieht derzeit so aus
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
quelle
quelle
tight_layout()
ist ein Hit und Miss. Ich habe versucht zu verstehen, was anders ist, wenn es keine Wirkung hat (große Ränder zwischen den Plots bleiben) - was oft dersuptitle
) mit meinem Nebenhandlungstitel überlagerte . Falls jemand auf ein ähnliches Problem stößt, hat in meinem Fall stackoverflow.com/a/45161551/11740420 Folgendes geholfen . Derrect
Parameter vontight_layout()
Sie können
plt.subplots_adjust
den Abstand zwischen den Unterplots (Quelle) ändern.Anrufsignatur:
Die Parameterbedeutungen (und die vorgeschlagenen Standardeinstellungen) sind:
Die tatsächlichen Standardeinstellungen werden von der RC-Datei gesteuert
quelle
Ich fand, dass subplots_adjust (hspace = 0.001) für mich funktioniert hat. Wenn ich Leerzeichen = Keine verwende, befindet sich zwischen den einzelnen Plots immer noch ein Leerzeichen. Das Setzen auf etwas sehr nahe an Null scheint sie jedoch zu zwingen, sich auszurichten. Was ich hier hochgeladen habe, ist nicht der eleganteste Code, aber Sie können sehen, wie der hspace funktioniert.
quelle
Die Methode plt.subplots_adjust :
oder
Die Größe des Bildes ist wichtig.
"Ich habe versucht, mit hspace herumzuspielen, aber durch Erhöhen werden nur alle Diagramme kleiner, ohne das Überlappungsproblem zu lösen."
Um mehr Leerraum zu schaffen und die Größe des Untergrundstücks beizubehalten, muss das Gesamtbild größer sein.
quelle
plt.figure(figsize=(10, 7))
, die Größe des Bildes wäre2000 x 1400
pixSie könnten das subplot_tool () versuchen
quelle
Ähnlich wie
tight_layout
Matplotlib jetzt (ab Version 2.2) bietetconstrained_layout
. Im Gegensatz zutight_layout
, die jederzeit im Code für ein einzelnes optimiertes Layout aufgerufen werden können,constrained_layout
handelt es sich um eine Eigenschaft, die aktiv sein kann und das Layout vor jedem Zeichenschritt .Daher muss es vor oder während der Erstellung des Unterplots aktiviert werden, z. B.
figure(constrained_layout=True)
odersubplots(constrained_layout=True)
.Beispiel:
Constrained_layout kann auch über gesetzt werden
rcParams
Weitere Informationen finden Sie im neuen Eintrag und im Handbuch für eingeschränktes Layout
quelle
tight_layout
tight_layout()
hat besser funktioniertcontrained_layout
langsamer, da es, wie in dieser Antwort zu sehen ist, das Layout vor jedem Zeichenschritt optimiert .