2013-03-06 12 views
5

W moim kodzie próbuję okresowo tworzyć wykres i zapisywać wykres do pliku. Kod wygląda następująco:Zatrzymaj pylab nakładające się działki?

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 jest licznik)

Jednak robi to oznacza, że ​​każdy nowy wykres, który jest tworzony, ciągle jest nakładka na działkach wcześniej. Jak mogę dać mu do zrozumienia, że ​​kiedy już zapisałem figurę, chcę, aby zaczęła się nowa postać?

Odpowiedz

8

Aby wyczyścić fabuła używać 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') 

zakładając że p jest matplotlib.pyplotfigure lub instancja, także co @bernie mówi - że będzie działać zbyt dobrze.

@ Yann za komentarz

Jeśli już skonfigurować swój tytuł, oś etykiet itp to będzie nuke wszystkie te ustawienia. Lepiej byłoby zrobić to, co mówi, i próbować, aby zachować swoją ciężką pracę. Dzięki Yann!

+0

Naprawiono, dzięki! –

+4

Możesz także chcieć zasugerować 'p.gca(). Cla()', więc jeśli masz tytuł, itd. I nie chcesz tego ponownie, po prostu zaktualizuj osie. Wyobrażam sobie, że istnieje również bardziej skomplikowany sposób aktualizacji danych histogramu. – Yann

2

Edytuj: Odpowiedź danodonovana jest bardziej prawdopodobna niż ta z punktu widzenia wydajności.


Nie pokazują jak p jest tworzony, ale przypuszczam, że jest coś takiego jak:

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

W takim przypadku, że po prostu trzeba upewnić się stworzyć nową postać za każdym razem . Przykład:

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

Przepraszam, p to pylab –

+0

Bez problemu. Cieszę się, że problem został rozwiązany. – bernie

2

Można również, po prostu włącz hold off (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') 

który usunie osie dla Ciebie, gdy kiedykolwiek dodać nową fabułę.

Jeśli masz wielu innych artystów i chcesz tylko usunąć najnowszą, możesz użyć funkcji instancji remove artystów.

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 
Powiązane problemy