Matplotlib bietet diese Funktionen:
cla() # Clear axis
clf() # Clear figure
close() # Close a figure window
Wann sollte ich welche Funktion verwenden und was genau macht sie?
Southoz
Matplotlib bietet diese Funktionen:
cla() # Clear axis
clf() # Clear figure
close() # Close a figure window
Wann sollte ich welche Funktion verwenden und was genau macht sie?
David Zwicker
Sie alle machen unterschiedliche Dinge, da matplotlib eine hierarchische Ordnung verwendet, in der ein Figurenfenster eine Figur enthält, die aus vielen Achsen bestehen kann. Zusätzlich gibt es Funktionen aus der Pyplot-Schnittstelle und Methoden auf der Figure
Klasse. Auf beide Fälle gehe ich weiter unten ein.
pyplot
ist ein Modul, das einige Funktionen sammelt, die eine funktionale Verwendung von matplotlib ermöglichen. Das vermute ich hier pyplot
wurde importiert als import matplotlib.pyplot as plt
. In diesem Fall gibt es drei verschiedene Befehle, die Dinge entfernen:
Sehen matplotlib.pyplot
Funktionen:
plt.cla()
löscht eine Achse, also die gerade aktive Achse in der aktuellen Figur. Die anderen Achsen bleiben unberührt.plt.clf()
löscht die gesamte aktuelle Figur mit all ihren Achsenlässt aber das Fenster geöffnet, so dass es für andere Plots wiederverwendet werden kann.plt.close()
schließt ein Fensterdas das aktuelle Fenster ist, sofern nicht anders angegeben.Welche Funktionen am besten zu Ihnen passen, hängt also von Ihrem Anwendungsfall ab.
Das close()
Funktion erlaubt es außerdem festzulegen, welches Fenster geschlossen werden soll. Das Argument kann entweder eine Nummer oder ein Name sein, der einem Fenster gegeben wurde, als es mit erstellt wurde figure(number_or_name)
oder es kann eine Abbildungsinstanz sein fig
erhalten, dh mitfig = figure()
. Wenn kein Argument angegeben wird close()
, wird das gerade aktive Fenster geschlossen. Weiterhin gibt es die Syntax close('all')
die alle Abbildungen schließt.
Zusätzlich die Figure
Die Klasse stellt Methoden zum Löschen von Zahlen bereit. Davon gehe ich im Folgenden aus fig
ist eine Instanz von a Figure
:
fig.clf()
löscht die gesamte Figur. Dieser Aufruf ist äquivalent zu plt.clf()
nur wenn fig
ist die aktuelle Zahl.
fig.clear()
ist ein Synonym für fig.clf()
Beachten Sie das sogar del fig
schließt das zugehörige Abbildungsfenster nicht. Soweit ich weiß, ist die einzige Möglichkeit, ein Figurenfenster zu schließen, die Verwendung plt.close(fig)
wie oben beschrieben.
Heberto Mayorquin
Es gibt nur eine Einschränkung, die ich heute entdeckt habe. Wenn Sie eine Funktion haben, die oft einen Plot aufruft, verwenden Sie besser plt.close(fig)
Anstatt von fig.clf()
irgendwie sammelt sich das erste nicht im speicher an. Zusamenfassend Wenn der Speicher ein Problem ist, verwenden Sie plt.close (fig) (Obwohl es anscheinend bessere Möglichkeiten gibt, finden Sie relevante Links am Ende dieses Kommentars).
Das folgende Skript erzeugt also eine leere Liste:
for i in range(5):
fig = plot_figure()
plt.close(fig)
# This returns a list with all figure numbers available
print(plt.get_fignums())
Wohingegen dieser eine Liste mit fünf Ziffern darauf erzeugt.
for i in range(5):
fig = plot_figure()
fig.clf()
# This returns a list with all figure numbers available
print(plt.get_fignums())
Aus der obigen Dokumentation ist mir nicht klar, was der Unterschied zwischen dem Schließen einer Figur und dem Schließen eines Fensters ist. Vielleicht klärt das auf.
Wenn Sie dort ein vollständiges Skript ausprobieren möchten, haben Sie:
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(1000)
y = np.sin(x)
for i in range(5):
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
ax.plot(x, y)
plt.close(fig)
print(plt.get_fignums())
for i in range(5):
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
ax.plot(x, y)
fig.clf()
print(plt.get_fignums())
Wenn der Speicher ein Problem ist, hat jemand bereits eine Problemumgehung in SO gepostet, siehe: Erstellen Sie eine Figur, die als Referenz gezählt wird
Vielen Dank für den hilfreichen Querverweis auf die Frage zur Referenzzählung. Genau so funktioniert Matplotlib sollte funktionieren schon. Es ist ebenso erschreckend und entsetzlich, dass Zahlen unter dem Standard niemals Müll gesammelt werden pyplot
API.
– Cecil Curry
4. Januar 2016 um 3:25 Uhr
Trotzdem habe ich festgestellt, dass es besser ist, die Figur zu löschen und neue Felder zu zeichnen, wenn man Animationen erstellen muss (z. B. einige 2D-Konturen-/Pcolormesh-Karten), anstatt alte zu schließen und neue Figurenfelder zu erstellen. Die Geschwindigkeit wird komplett anders sein.
– msi_gerva
11. September 2018 um 17:10 Uhr
Philipp
plt.cla() meint aktuelle Achse löschen
plt.clf() meint klare aktuelle Zahl
außerdem gibt es plt.gca() (Aktuelle Achse erhalten) und plt.gcf() (aktuelle Zahl abrufen)
Lesen Sie hier mehr: Matplotlib, Pyplot, Pylab usw.: Was ist der Unterschied zwischen diesen und wann sollte man sie verwenden?