Wann sollte cla(), clf() oder close() zum Löschen eines Plots verwendet werden?

Lesezeit: 4 Minuten

Benutzer-Avatar von Southoz
Südoz

Matplotlib bietet diese Funktionen:

cla()   # Clear axis
clf()   # Clear figure
close() # Close a figure window

Wann sollte ich die einzelnen Funktionen verwenden und was genau bewirkt sie?

David Zwickers Benutzeravatar
David Zwicker

Sie machen alle unterschiedliche Dinge, da Matplotlib eine hierarchische Reihenfolge verwendet, in der ein Figurenfenster eine Figur enthält, die aus vielen Achsen bestehen kann. Darüber hinaus gibt es Funktionen aus der Pyplot-Schnittstelle und Methoden auf der Figure Klasse. Auf beide Fälle werde ich weiter unten eingehen.

Pyplot-Schnittstelle

pyplot ist ein Modul, das eine Reihe von Funktionen sammelt, die eine funktionale Verwendung von matplotlib ermöglichen. Ich gehe hier davon aus 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 aktuell aktive Achse in der aktuellen Figur. Die anderen Achsen bleiben unberührt.
  • plt.clf() löscht die gesamte aktuelle Figur mit allen 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 somit von Ihrem Anwendungsfall ab.

Der close() Mit der Funktion kann außerdem angegeben werden, welches Fenster geschlossen werden soll. Das Argument kann entweder eine Zahl oder ein Name sein, der einem Fenster beim Erstellen mit gegeben wurde figure(number_or_name) oder es kann eine Figureninstanz sein fig erhalten, d. h. unter Verwendungfig = figure(). Wenn kein Argument angegeben wird close(), das aktuell aktive Fenster wird geschlossen. Darüber hinaus gibt es die Syntax close('all')womit alle Figuren abgeschlossen sind.

Methoden der Figure-Klasse

Darüber hinaus ist 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 entspricht plt.clf() nur wenn fig ist der aktuelle Wert.

fig.clear() ist ein Synonym für fig.clf()

Beachten Sie das sogar del fig Das zugehörige Figurenfenster wird nicht geschlossen. Soweit ich weiß, ist die einzige Möglichkeit, ein Figurenfenster zu schließen, die Verwendung von plt.close(fig) wie oben beschrieben.

Benutzeravatar von Heberto Mayorquin
Heberto Mayorquin

Es gibt nur einen Vorbehalt, den ich heute entdeckt habe. Wenn Sie eine Funktion haben, die häufig einen Plot aufruft, ist es besser, sie zu verwenden plt.close(fig) anstatt fig.clf() Irgendwie sammelt sich das erste nicht im Gedächtnis an. Zusamenfassend Wenn der Speicher ein Problem darstellt, 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())

Während dieses eine Liste mit fünf Ziffern erstellt.

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.

Wenn Sie dort ein vollständiges Skript ausprobieren möchten, haben Sie Folgendes:

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 darstellt, hat jemand in SO bereits eine Problemumgehung veröffentlicht, siehe: Erstellen Sie eine Zahl, die referenzgezählt wird

  • Vielen Dank für den hilfreichen Querverweis zur Frage zur Referenzzählung. Genau so funktioniert Matplotlib sollen funktioniert schon. Es ist gleichermaßen erschreckend und entsetzlich, dass Zahlen gemäß der Norm niemals in den Müll geworfen werden pyplot API.

    – Cecil Curry

    4. Januar 2016 um 3:25

  • Dennoch habe ich herausgefunden, dass es beim Erstellen von Animationen (z. B. einige 2D-Kontur-/Pcolormesh-Karten) besser ist, die Figur zu löschen und neue Felder zu zeichnen, anstatt alte zu schließen und neue Figurenfelder zu erstellen. Die Geschwindigkeit wird völlig anders sein.

    – msi_gerva

    11. September 2018 um 17:10 Uhr

  • Vielen Dank, mein Problem für die Animation wurde gelöst. Ich habe die Achsenduplizierung im Plot durch plt.cla() in der Animate-Funktion entfernt.

    – Zaheer

    27. Okt. 2022 um 13:42 Uhr

Felipes Benutzeravatar
Felipe

plt.cla() bedeutet Aktuelle Achse löschen

plt.clf() bedeutet klare aktuelle Zahl

Außerdem gibt es plt.gca() (aktuelle Achse abrufen) 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 jeweils verwenden?

1450300cookie-checkWann sollte cla(), clf() oder close() zum Löschen eines Plots verwendet werden?

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

Privacy policy