2013-03-06 19 views
5

In meinem Code versuche ich regelmäßig ein Diagramm zu erstellen und das Diagramm in einer Datei zu speichern. Der Code sieht wie folgt aus:Stoppen Sie pylab Overlay Plots?

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 ist ein Zähler)

aber dies zu tun bedeutet, dass jede neue Handlung, die erstellt wird, hält, bevor sie auf den Stellplätzen überschichtet werden. Wie kann ich es wissen lassen, dass, sobald ich die Figur gerettet habe, ich möchte, dass sie eine neue Figur beginnt?

Antwort

8

die Handlung 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') 

der Annahme, dass p ist ein matplotlib.pyplot oder figure Instanz verwenden zu löschen, auch was @bernie sagt - auch das gut funktionieren würde.

@ Yann Kommentar

Wenn Sie bereits Ihren Titel, Achsenbeschriftungen etc. eingerichtet haben, dann wird dies alle diese Einstellungen nuke. Besser wäre zu tun, was er sagt und versuchen

p.gca().cla() 

Ihre harte Arbeit zu bewahren. Danke Yann!

+0

Fixed it, danke! –

+4

Sie können auch 'p.gca(). Cla()' vorschlagen, so dass Sie, wenn Sie einen Zahlentitel usw. haben und dies nicht wiederholen möchten, nur die Achsen aktualisieren. Ich kann mir vorstellen, dass es auch eine kompliziertere Möglichkeit gibt, die Daten eines Histogramms zu aktualisieren. – Yann

2

Edit: danodonovan's Antwort ist wahrscheinlich diese aus einer Performance-Sicht vorzuziehen.


Sie zeigen nicht, wie p erstellt wird, aber ich nehme an ist so etwas wie:

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

In diesem Fall müssten Sie nur sicherstellen, dass Sie jedes Mal eine neue Figur erstellen . Beispiel:

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

Sorry, p ist pylab –

+0

Kein Problem. Ich bin froh, dass Sie das Problem behoben haben. – bernie

2

Sie auch können, schalten Sie einfach 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') 

, die die Achsen für Sie freigeben wird, wann immer Sie einen neuen Plot hinzuzufügen.

Wenn Sie eine Gruppe von anderen Künstlern haben, und nur die neueste entfernen möchten, können Sie die remove Instanzfunktion von Künstlern verwenden.

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