Matplotlib:在同一图形中绘制多个不重叠的图表

3 投票
1 回答
10632 浏览
提问于 2025-04-16 01:08

我有一个类,用来绘制图形,然后把它们保存到文件里。下面是这个类的简化版本:

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

这是生成的结果:

测试1

测试2

问题是,测试2的图像里也包含了测试1的点。因为这些图是动态生成的,都是在一个循环里,所以我不能直接写死图的编号。

我可以设置一个计数器,然后把它传给类的构造函数,但我在想有没有更优雅的解决办法。我试过删除测试1的对象,但这样并没有什么效果。

1 个回答

10

你可以使用图形的 clf 方法来清空图形,这样在你完成一个图形后就可以把它清理掉。另外,pyplot.clf 也可以用来清空当前的图形。

另外,如果你只是想要一个新的图形,可以直接调用 pyplot.figure,不需要特别指定 num 参数——它会自动增加编号,所以你不需要自己去计数。

撰写回答