matplotlib.pyplot nie zapomni poprzednich działek - jak mogę opróżnić / odświeżyć?

88

Jak można matplotlib.pyplot„zapomnieć” o poprzednich wątkach

Próbuję wykreślić wiele razy za pomocą matplotlib.pyplot

Kod wygląda następująco:

def plottest():
    import numpy as np
    import matplotlib.pyplot as plt


    a=np.random.rand(10,)
    b=np.random.rand(10,)
    c=np.random.rand(10,)


    plt.plot(a,label='a')
    plt.plot(b,label='b')
    plt.plot(c,label='c')
    plt.legend(loc='upper left')
    plt.ylabel('mag')
    plt.xlabel('element)')
    plt.show()

    e=np.random.rand(10,)
    f=np.random.rand(10,)
    g=np.random.rand(10,)


    plt.plot(e,label='e')
    plt.plot(f,label='f')
    plt.plot(g,label='g')
    plt.legend(loc='upper left')
    plt.ylabel('mag')
    plt.xlabel('element)')
    plt.show()

Niestety, wciąż otrzymuję tę samą fabułę (właściwie z innego kodu, który uruchomiłem i ukończyłem jakiś czas temu) bez względu na to, co robię.

Podobny kod działał wcześniej dla mnie.

Spojrzałem na te pytania:

Jak „wyczyścić tablicę”?

Matplotlib pyplot show () nie działa po zamknięciu

(python) matplotlib pyplot show () .. blokuje czy nie?

i próbował używać plt.show(), plt.clf()ale plt.closebezskutecznie.

Jakieś pomysły?

atomh33ls
źródło

Odpowiedzi:

112

Wolałbym używać plt.clf()po każdym, plt.show()aby po prostu wyczyścić bieżącą liczbę zamiast ją zamykać i otwierać, zachowując rozmiar okna i zapewniając lepszą wydajność i znacznie lepsze wykorzystanie pamięci.

Podobnie możesz zrobić, plt.cla() aby po prostu wyczyścić bieżące osie .

Aby wyczyścić określone osie , przydatne, gdy masz wiele osi na jednej figurze, możesz na przykład:

fig, axes = plt.subplots(nrows=2, ncols=2)

axes[0, 1].clear()
Saullo GP Castro
źródło
47

Odkryłem, że takie zachowanie występuje dopiero po uruchomieniu określonego skryptu, podobnego do tego, o którym mowa w pytaniu. Nie mam pojęcia, dlaczego tak się dzieje.

Działa (odświeża wykresy), jeśli wstawię

plt.clf()
plt.cla()
plt.close()

po każdym plt.show()

atomh33ls
źródło