5

在我的代码中,我试图定期创建一个图形并将图形保存到一个文件中。代码如下所示:

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是一个计数器)

但是,这样做意味着创建的每个新图都会一直覆盖到之前的图上。我如何让它知道一旦我保存了图,我希望它开始一个新图?

4

3 回答 3

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

假设这p是一个matplotlib.pyplotfigure实例,也是@bernie 所说的 - 这也可以正常工作。

@Yann 的评论

如果您已经设置了标题、轴标签等,那么这将破坏所有这些设置。最好按照他说的去做并尝试

 p.gca().cla()

保存你的辛勤工作。谢谢雅恩!

于 2013-03-06T17:25:42.433 回答
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')
于 2013-03-06T17:25:57.257 回答
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
于 2013-03-06T17:45:01.650 回答