2013-03-06 127 views
5

在我的代碼中,我試圖定期創建一個圖並將圖保存到一個文件中。代碼如下所示:停止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是一個計數器)

但是,這樣做意味着所創建的每個新的情節,不斷被前覆蓋到的地塊。我怎麼能讓它知道,一旦我保存了這個數字,我想讓它開始一個新的數字?

回答

8

要清除情節使用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') 

假設是pmatplotlib.pyplotfigure情況下,也什麼@bernie說 - 這將工作也沒關係。

@晏的評論

如果您已經設置了您的標題,軸標籤等,那麼這將核彈所有這些設置。更好的辦法是按照他的說法和嘗試

p.gca().cla() 

保護您的辛勤工作。謝謝Yann!

+0

修好了,謝謝! – 2013-03-06 17:28:46

+4

您可能還想建議'p.gca()。cla()',這樣如果您有一個圖標題等,並且您不想重做所有這些,只需更新座標軸即可。我想有一種更復雜的方式來更新直方圖的數據。 – Yann 2013-03-06 17:30:32

2

編輯:從性能的角度來看,danodonovan的答案很可能比這個更適合。


你沒有表現如何p被創建,但我相信它是一樣的東西:

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

在這種情況下,你只需要確保你每次創建一個新的人物。例如:

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

對不起,p是pylab – 2013-03-06 17:26:51

+0

沒問題。很高興你解決了這個問題。 – bernie 2013-03-06 17:29:44

2

還可以,只是把hold關閉(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') 

這將清除您的軸時,無論你增加一個新的陰謀。

如果您有其他一些藝術家,並且只想刪除最近的藝術家,您可以使用藝術家的實例功能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