2010-07-11 256 views
3

我有一个类,我用它来绘制东西,然后将它们保存到一个文件。下面是它的一个简化版本:Matplotlib:使用相同的图绘制多个图,没有重叠

import matplotlib 
matplotlib.use('Agg') 
import matplotlib.pyplot as plt 

class Test(): 
    def __init__(self, x, y, filename): 

     fig = plt.figure(1) 
     ax = fig.add_subplot(111) 

     ax.plot(x, y, 'D', color='red') 

     ax.set_xbound(-5,5) 
     ax.set_ybound(-5,5) 

     plt.savefig('%s.png' % filename) 


test1 = Test(1,2, 'test1') 
test2 = Test(2,4, 'test2') 

下面是结果:

test1的

test2的

的问题是,test2的图像还具有从测试1点。图形是在一个循环中动态生成的,所以我不能硬编码图形编号。

我可以做一个计数器,并将其传递给类的构造函数,但我想知道是否有更优雅的方法来做到这一点。我尝试删除test1对象,但没有做任何事情。

回答

9

您可以使用图的clf方法在完成一个图形后清除图形。另外,pyplot.clf将清除当前的数字。

或者,如果你只是想要一个新的数字,然后调用pyplot.figure没有明确的num参数 - 它会自动增加,所以你不需要保留一个计数器。

+1

+1,我建议只留下'num'参数。 – 2010-07-12 00:12:55

+0

这很好。谢谢。我只需要一个新的数字,所以我忽略了'num'参数。直到现在我才知道我可以这样做。 – yoshi 2010-07-12 00:24:47