Wanneer gebruik je cla(), clf() of close() voor het wissen van een plot in matplotlib?

Matplotlib biedt deze functies:

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

De documentatie biedt niet veel inzicht in wat het verschil tussen deze functies is. Wanneer moet ik elke functie gebruiken en wat doet het precies?


Antwoord 1, autoriteit 100%

Ze doen allemaal verschillende dingen, aangezien matplotlib een hiërarchische volgorde gebruikt waarin een figuurvenster een figuur bevat die uit vele assen kan bestaan. Daarnaast zijn er functies van de pyplot-interface en zijn er methoden in de klasse Figure. Ik zal beide gevallen hieronder bespreken.

pyplot-interface

pyplotis een module die een aantal functies verzamelt waarmee matplotlib op een functionele manier kan worden gebruikt. Ik neem hier aan dat pyplotis geïmporteerd als import matplotlib.pyplot as plt.
In dit geval zijn er drie verschillende commando’s die dingen verwijderen:

plt.cla()wist een assen, dwz de momenteel actieve assen in de huidige figuur. Het laat de andere assen onaangeroerd.

plt.clf()wist de volledige huidige figuurmet al zijn assen, maar laat het venster open staan, zodat het kan worden hergebruikt voor andere plots.

plt.close()sluit een venster, wat het huidige venster zal zijn, tenzij anders aangegeven.

Welke functies het beste bij u passen, hangt dus af van uw gebruikssituatie.

De close()FUNCTION Bovendien kan iemand opgeven welk venster moet worden gesloten. Het argument kan een nummer of naam zijn die is gegeven aan een venster wanneer deze is gemaakt met figure(number_or_name)of het kan een figuurinstantie zijn figVRAGEN, IE, met fig = figure(). Als er geen argument wordt gegeven aan close(), wordt het momenteel actieve venster gesloten. Bovendien is er de syntaxis close('all'), die alle cijfers sluit.

Methoden van de cijfers van de figuur

Bovendien biedt de Figure-klasse methoden voor het opruimen van cijfers.
Ik neem aan in het volgende dat figeen exemplaar van een Figureis:

fig.clf()wist de hele figuur . Deze oproep is gelijk aan plt.clf()ALLEEN INDIEN figis de huidige figuur.

fig.clear()is een synoniem voor fig.clf()

Merk op dat zelfs del fighet geassocieerde figuurvenster niet zal sluiten. Voor zover ik weet, is de enige manier om een ​​figuurvenster te sluiten plt.close(fig)zoals hierboven beschreven.


Antwoord 2, Autoriteit 11%

Er is slechts een voorbehoud die ik vandaag heb ontdekt.
Als u een functie hebt die een perceel belt, gebruikt u beter plt.close(fig)in plaats van fig.clf()op de een of andere manier niet in het geheugen. Kortom Als het geheugen een probleem is, gebruik PLT.Sluit (Fig) (hoewel het erop lijkt dat er betere manieren zijn, ga naar het einde van deze opmerking voor relevante links).

Dus het volgende script produceert een lege lijst:

for i in range(5):
    fig = plot_figure()
    plt.close(fig)
# This returns a list with all figure numbers available
print(plt.get_fignums())

Terwijl deze een lijst zal produceren met vijf cijfers erop.

for i in range(5):
    fig = plot_figure()
    fig.clf()
# This returns a list with all figure numbers available
print(plt.get_fignums())

Uit de bovenstaande documentatie is mij niet duidelijk wat het verschil is tussen het sluiten van een figuur en het sluiten van een venster. Misschien verduidelijkt dat.

Als je een compleet script wilt proberen, heb je:

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())

Als geheugen een probleem is, heeft iemand al een work-around gepost in SO, zie:
Maak een figuur waarvan de referentie wordt geteld


Antwoord 3, autoriteit 2%

plt.cla()betekent huidige as wissen

plt.clf()betekent huidig cijfer wissen

er is ook plt.gca()(huidige as ophalen) en plt.gcf()(huidig cijfer ophalen)

Lees hier meer: Matplotlib, Pyplot, Pylab enz.: Wat is het verschil tussen deze en wanneer u ze allemaal moet gebruiken?

Other episodes