Kiedy użyć cla (), clf () lub close () do wyczyszczenia wykresu w matplotlib?

Matplotlib oferuje następujące funkcje:

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

Dokumentacja nie daje zbyt dużego wglądu w różnice między tymi funkcjami. Kiedy należy korzystać z każdej funkcji i co dokładnie robi?

Author: endolith, 2011-11-21

3 answers

Wszystkie one robią różne rzeczy, ponieważ matplotlib używa hierarchicznego porządku, w którym okno rysunku zawiera figurę, która może składać się z wielu osi. Dodatkowo istnieją funkcje z interfejsu pyplot oraz metody z klasy Figure. Omówię oba przypadki poniżej.

Interfejs Pyplot

pyplot jest modułem, który zbiera kilka funkcji, które pozwalają na wykorzystanie matplotlib w sposób funkcjonalny. Zakładam tutaj, że pyplot został zaimportowany jako import matplotlib.pyplot as plt. W tym przypadku istnieją trzy różne polecenia, które usuwają rzeczy:

plt.cla() czyści osie, tzn. aktualnie aktywne osie na bieżącym rysunku. Pozostawia Pozostałe osie nietknięte.

plt.clf() czyści całą bieżącą figurę ze wszystkimi jej osiami, ale pozostawia otwarte okno, tak że może być ponownie wykorzystane dla innych działek.

plt.close() zamyka okno , które będzie bieżącym oknem, jeśli nie podano inaczej.

Które funkcje najbardziej Ci odpowiadają, zależy więc od Twojego przypadku użycia.

Funkcja close() pozwala ponadto określić, które okno ma być zamknięte. Argument może być liczbą lub nazwą danego okna, gdy zostało utworzone za pomocą figure(number_or_name) lub może być instancją figure fig uzyskaną, tzn. za pomocą fig = figure(). Jeśli nie podano argumentu close(), aktualnie aktywne okno zostanie zamknięte. Ponadto istnieje składnia close('all'), która zamyka wszystkie figury.

Metody rysunku Klasa

Dodatkowo klasa Figure zapewnia metody rozliczania liczb. Zakładam, że fig jest instancją Figure:

fig.clf() czyści całą figurę . Wywołanie to jest równoważne plt.clf() tylko wtedy, gdy fig jest liczbą bieżącą.

fig.clear() jest synonimem fig.clf()

Zauważ, że nawet del fig nie zamknie powiązanego okna rysunku. Z tego, co wiem, jedynym sposobem zamknięcia okna rysunku jest użycie plt.close(fig) zgodnie z opisem powyżej.

 784
Author: David Zwicker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-06 02:08:57

Jest tylko zastrzeżenie, które dziś odkryłem. Jeśli masz funkcję, która często wywołuje Wykres, lepiej Użyj plt.close(fig) zamiast fig.clf() jakoś pierwsza nie gromadzi się w pamięci. W skrócie Jeśli pamięć jest problemem, użyj plt.close (fig) (chociaż wydaje się, że są lepsze sposoby, przejdź do końca tego komentarza po odpowiednie linki).

Zatem następujący skrypt wytworzy pustą listę:

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

Podczas gdy ten stworzy listę z pięcioma domyśliłem się.

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

Z powyższej dokumentacji nie jest dla mnie jasne, jaka jest różnica między zamknięciem figury a zamknięciem okna. Może to się wyjaśni.

Jeśli chcesz wypróbować kompletny skrypt masz:

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

Jeśli pamięć jest problemem, ktoś już opublikował pracę w SO see: Utwórz figurę, która jest liczona

 87
Author: Ramon Martinez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-27 13:04:27

Plt.cla () oznacza Wyczyść oś prądu

Plt.clf () oznacza Wyczyść bieżący rysunek

Jest też plt.gca () (get current axis) i plt.gcf () (get current figure)

Czytaj więcej tutaj: Matplotlib, Pyplot, Pylab itp: Jaka jest różnica między tymi i kiedy używać każdego z nich?

 15
Author: Felipe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-11-17 15:37:23