停止pylab覆盖图形?

2024-06-26 13:46:46 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

但是,这样做意味着创建的每个新图都将继续覆盖到之前的图上。我怎样才能让它知道,一旦我保存了数字,我希望它开始一个新的数字?


Tags: 文件代码import图形datadefas数字
3条回答

你也可以,只要把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实例function。

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

要清除绘图,请使用^{}

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

为了保持你的努力。谢谢燕恩!

编辑:从表演的角度来看,达诺多诺万的回答很可能比这个更可取。


你没有展示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')

相关问题 更多 >