2013-03-06 13 views
5

Nel mio codice, sto provando a creare periodicamente un grafico e salvare il grafico in un file. Il codice è simile al seguente:Interrompere i grafici sovrapposti di pylab?

import pylab as p 

def simpledist(speclist,totalbugs,a): 
    data = [float(spec.pop)/float(totalbugs) for spec in speclist] 
    p.hist(data) 
    p.savefig('/Home/s1215235/Documents/python/newfolder/' + str(a) + '.png') 

(a è un contatore)

Tuttavia, fare questo significa che ogni nuova trama che si crea, continua ad essere sovrapposto sulle trame prima. Come faccio a sapere che una volta salvata la figura, voglio che inizi una nuova figura?

risposta

8

Per cancellare usare la trama p.clf

def simpledist(speclist,totalbugs,a): 
    data = [float(spec.pop)/float(totalbugs) for spec in speclist] 
    p.clf() 
    p.hist(data) 
    p.savefig('/Home/s1215235/Documents/python/newfolder/' + str(a) + '.png') 

presumendo che p è un'istanza matplotlib.pyplot o figure, anche ciò che @bernie dice - che avrebbe funzionato troppo fine.

@ commento di Yann

Se hai già impostato il titolo, le etichette degli assi ecc allora questo sarà bombardare tutte quelle impostazioni. Meglio sarebbe quella di fare come dice lui e cercare

p.gca().cla() 

per preservare il vostro duro lavoro. Grazie Yann!

+0

Risolto, grazie! –

+4

Si potrebbe anche suggerire 'p.gca(). Cla()', in modo che se si ha un titolo di figura, ecc. E non si voglia ripetere tutto questo, basta aggiornare gli assi. Immagino che ci sia un modo più complicato per aggiornare anche i dati di un istogramma. – Yann

2

Modifica: la risposta del danodonovan è molto probabilmente preferibile a questa dal punto di vista delle prestazioni.


Non mostrare come p si crea, ma presumo che è qualcosa di simile:

import matplotlib.pyplot as plt 
p = plt.figure() 

Nel qual caso si era appena necessario assicurarsi di creare una nuova figura di volta in volta . Esempio:

def simpledist(speclist,totalbugs,a): 
    data = [float(spec.pop)/float(totalbugs) for spec in speclist] 
    p = plt.figure() # let's have a new figure why don't we 
    p.hist(data) 
    p.savefig('/Home/s1215235/Documents/python/newfolder/' + str(a) + '.png') 
+0

scusate, p è pylab –

+0

Nessun problema. Sono contento che hai risolto il problema. – bernie

2

È anche possibile, basta girare hold fuori (doc)

import pylab as p 
ax = p.gca() 
ax.hold(False) 

def simpledist(speclist,totalbugs,a): 
    data = [float(spec.pop)/float(totalbugs) for spec in speclist] 
    ax.hist(data) 
    ax.figure.savefig('/Home/s1215235/Documents/python/newfolder/' + str(a) + '.png') 

che annullerà gli assi per voi quando mai si aggiunge una nuova trama.

Se si dispone di un gruppo di altri artisti e si desidera rimuovere solo quello più recente, è possibile utilizzare il functoin di artisti remove.

import pylab as p 
ax = p.gca() 
# draw a bunch of stuff onto the axse 

def simpledist(speclist,totalbugs,a): 
    data = [float(spec.pop)/float(totalbugs) for spec in speclist] 
    n, bins, h_art = ax.hist(data) 
    ax.figure.savefig('/Home/s1215235/Documents/python/newfolder/' + str(a) + '.png') 
    for ha in h_art: 
     h_a.remove() 
    # ax.figure.canvas.draw() # you might need this 
Problemi correlati