2013-03-06 130 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