Wann verwendet man cla(), clf() oder close() zum Löschen eines Diagramms in Matplotlib?

Lesezeit: 4 Minuten

Benutzer-Avatar
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?

Benutzer-Avatar
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-Schnittstelle

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.

Methoden der Figure-Klasse

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.

Benutzer-Avatar
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

Benutzer-Avatar
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?

1130710cookie-checkWann verwendet man cla(), clf() oder close() zum Löschen eines Diagramms in Matplotlib?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy