Die Antwort von las3rjock , die irgendwie die vom OP akzeptierte Antwort ist, ist falsch - der Code wird weder ausgeführt noch ist die Matplotlib-Syntax gültig. Diese Antwort enthält keinen ausführbaren Code und enthält keine Informationen oder Vorschläge, die das OP beim Schreiben eines eigenen Codes zur Lösung des Problems im OP als nützlich erachten könnte.
Angesichts der Tatsache, dass dies die akzeptierte Antwort ist und bereits mehrere positive Stimmen erhalten hat, denke ich, dass eine kleine Dekonstruktion angebracht ist.
Zuerst ruft subplot ist nicht geben Ihnen mehrere Plots; Unterplot wird aufgerufen, um ein einzelnes Plot sowie mehrere Plots zu erstellen. Außerdem ist "Ändern von plt.figure (i)" nicht korrekt.
plt.figure () (in dem plt oder PLT normalerweise die Pyplot-Bibliothek von matplotlib ist, die als globale Variable, plt oder manchmal PLT, importiert und zurückgebunden wird, wie folgt:
from matplotlib import pyplot as PLT
fig = PLT.figure()
Die Zeile direkt darüber erstellt eine Matplotlib-Figureninstanz. Die add_subplot- Methode dieses Objekts wird dann für jedes Plotfenster aufgerufen (denken Sie informell an eine x & y-Achse, die ein einzelnes Subplot umfasst). Sie erstellen (ob nur eine oder mehrere auf einer Seite) wie folgt
fig.add_subplot(111)
Diese Syntax entspricht
fig.add_subplot(1,1,1)
Wählen Sie diejenige, die für Sie Sinn macht.
Unten habe ich den Code aufgelistet, um zwei Diagramme auf einer Seite übereinander zu zeichnen. Die Formatierung erfolgt über das an add_subplot übergebene Argument . Beachten Sie, dass das Argument ( 211 ) für den ersten Plot und ( 212 ) für den zweiten ist.
from matplotlib import pyplot as PLT
fig = PLT.figure()
ax1 = fig.add_subplot(211)
ax1.plot([(1, 2), (3, 4)], [(4, 3), (2, 3)])
ax2 = fig.add_subplot(212)
ax2.plot([(7, 2), (5, 3)], [(1, 6), (9, 5)])
PLT.show()
Jedes dieser beiden Argumente ist eine vollständige Spezifikation für die korrekte Platzierung der jeweiligen Plotfenster auf der Seite.
211 (was wiederum auch in 3-Tupel-Form geschrieben werden könnte, da (2,1,1) zwei Zeilen und eine Spalte vonPlotfenstern bedeutet; die dritte Ziffer gibt die Reihenfolge dieses bestimmten Unterplotfensters relativ zu den anderen Unterplotfenstern an. -In diesem Fall ist dies das erste Diagramm (das es in Zeile 1 platziert), daher Diagramm Nummer 1, Zeile 1, Spalte 1.
Das an den zweiten Aufruf von add_subplot übergebene Argument unterscheidet sich vom ersten nur durch die nachfolgende Ziffer (eine 2 anstelle einer 1, da dieses Diagramm das zweite Diagramm ist (Zeile 2, Spalte 1).
Ein Beispiel mit mehr Plots: Wenn Sie stattdessen vier Plots auf einer Seite in einer 2x2-Matrixkonfiguration wünschen, rufen Sie die Methode add_subplot viermal auf und übergeben diese vier Argumente (221), (222), (223) und ( 224), um vier Diagramme auf einer Seite um 10, 2, 8 bzw. 4 Uhr und in dieser Reihenfolge zu erstellen.
Beachten Sie, dass jedes der vier Argumente zwei führende 2 enthält - die die 2 x 2-Konfiguration codieren, dh zwei Zeilen und zwei Spalten.
Die dritte (am weitesten rechts stehende) Ziffer in jedem der vier Argumente codiert die Reihenfolge dieses bestimmten Plotfensters in der 2 x 2-Matrix - dh Zeile 1 Spalte 1 (1), Zeile 1 Spalte 2 (2), Zeile 2 Spalte 1 (3), Zeile 2 Spalte 2 (4).
fig.add_axes(rect)
anstelle von verwendenadd_subplot
?PLT
? Nie zuvor gesehen, dass es benutzt wirdfor i in range(16): plt.subplot(4, 4, i+1)
und keinen Syntaxfehler feststellen . Die Antwort wird akzeptiert, weil sie wahrscheinlich das getan hat, was das OP wollte.Da diese Frage von vor 4 Jahren stammt, wurden neue Dinge implementiert und unter ihnen gibt es eine neue Funktion,
plt.subplots
die sehr praktisch ist :Wo
axes
ist einnumpy.ndarray
AxesSubplot-Objekt, was es sehr bequem macht, die verschiedenen Unterplots nur mit Array-Indizes durchzugehen[i,j]
.quelle
Das funktioniert auch:
Es werden insgesamt 19 Grafiken auf einer Seite dargestellt. Das Format ist 5 nach unten und 4 über ..
quelle
Die Antwort von @doug & FS. sind sehr gute Lösungen. Ich möchte die Lösung für die Iteration auf pandas.dataframe freigeben.
quelle
for i,col in enumerate(df.columns):