停止pylab覆盖图?

时间:2013-03-06 17:20:48

标签: python matplotlib overlay

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

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是一个柜台)

然而,这样做意味着创建的每个新绘图都会在之前的图上重叠。我怎么能让它知道,一旦我保存了这个数字,我想让它开始一个新的数字?

3 个答案:

答案 0 :(得分: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所说的 - 也可以正常工作。

@ Yann的评论

如果您已经设置了标题,轴标签等,那么这将取消所有这些设置。更好的是按照他的说法去尝试

 p.gca().cla()

保持你的辛勤工作。谢谢Yann!

答案 1 :(得分: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')

答案 2 :(得分: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