2014-06-30 8 views
9

Sto usando Matplotlib e MPLD3 per creare grafici che possono essere visualizzati in plages html (usando django). Attualmente i miei grafici vengono generati dinamicamente da dati estratti da file CSV. Ogni tanto ricevo questo messaggio nel mio terminale:Closing Matplotlib figures

RuntimeWarning: sono state aperte più di 20 cifre. Le cifre create tramite l'interfaccia di pyplot (matplotlib.pyplot.figure) vengono mantenute fino alla chiusura esplicita e possono consumare troppa memoria. (Per controllare questo avviso, consultare rcParam figure.max_num_figures). max_open_warning, RuntimeWarning)

io non sono davvero sicuro che cosa significa, ma io parto dal presupposto che significa che dovrei avere qualche modo di chiudere grafici che non sono in uso. C'è comunque qualcosa da fare o sono completamente fuori base? Grazie.

+8

Non sono sicuro che è il migliore duplicato. La risposta breve è che dovresti ripulire i tuoi grafici dopo aver finito con loro: 'plt.close (fig)' o 'plt.close ('all')'. – tacaswell

+1

@tcaswell perché non aggiungere questo come risposta? – Korem

risposta

2

Le cifre verranno automaticamente chiuse (dalla procedura di garbage collection) se non vengono create tramite l'interfaccia di Pyplot. Ad esempio è possibile creare figure utilizzando:

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 

(Basato sul this answer)

7

ho preferito la risposta dei tacaswell nei commenti, ma ha dovuto cercarlo.

ripulire il vostro trame dopo che si è fatto con loro:

plt.close(fig)

o

plt.close('all')

+3

strano, mi chiedo perché non c'è un metodo 'close()' della figura, quindi. –