2014-06-30 13 views
9

Używam Matplotlib i MPLD3 do tworzenia wykresów, które mogą być wyświetlane na stronach html (przy użyciu django). Obecnie moje wykresy są generowane dynamicznie z danych pobieranych z plików CSV. Co jakiś czas pojawia się ten komunikat w moim terminalu:Zamykanie figurek Matplotlib

RuntimeWarning: Ponad 20 cyfr zostało otwartych. Rysunki utworzone za pomocą interfejsu Pyplot (matplotlib.pyplot.figure) są zachowywane do momentu jawnego zamknięcia i mogą zużywać zbyt dużo pamięci. (Aby kontrolować to ostrzeżenie, zobacz rcParam figure.max_num_figures). max_open_warning, RuntimeWarning)

Nie jestem pewien, co to znaczy, ale jestem przy założeniu, to znaczy muszę mieć jakiś sposób zamykania wykresy, które nie są w użyciu. Czy jest w ogóle to zrobić, czy jestem całkowicie poza bazą? Dzięki.

+8

Nie jestem pewien, że jest to najlepszy duplikat. Krótka odpowiedź brzmi: wyczyść swoje działki po ich zakończeniu: 'plt.close (rys.)' Lub 'plt.close ('all')'. – tacaswell

+1

@ tcaswell dlaczego nie dodać tego jako odpowiedź? – Korem

Odpowiedz

2

Ryciny zostaną automatycznie zamknięte (po oczyszczeniu pamięci), jeśli nie zostaną utworzone za pomocą interfejsu Pyplot. Na przykład można utworzyć dane przy użyciu:

from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas 
from matplotlib.figure import Figure 


def new_fig(): 
    """Create a new matplotlib figure containing one axis""" 
    fig = Figure() 
    FigureCanvas(fig) 
    ax = fig.add_subplot(111) 

    return fig, ax 

(Na podstawie this answer)

7

wolałem odpowiedź tacaswell w komentarzach, ale musiał go szukać.

oczyścić działki po zakończeniu z nich:

plt.close(fig)

lub

plt.close('all')

+3

dziwne, zastanawiam się, dlaczego nie istnieje metoda "close()" na rysunku. –