Matplotlib - 仅显示一个图表

12

我有一些由代码生成的情节。 我想保存它们所有,但只想显示一个。 我可以很好地完成保存部分,但只显示一个正在证明是一种痛苦。

一直在尝试实现这一点,却一直在打转。 我离目标最近的一次是清除除了一个之外的所有图形,但当我尝试仅显示一个图形时,它们全部都显示出来。 开始觉得要么我忽略了非常简单的事情,要么就是不可能。

有人知道如何实现这个吗?

编辑:添加示例代码。 抱歉一开始没有这样做。

    fig1 = plt.figure(1)
    plt.plot([0, 1, 2, 3, 4], [0, 1, 2, 3, 4], label="Test", color='g')
    plt.plot([0, 1, 2, 3, 4], [0, 1, 4, 9, 16],  label="Other Test",  color='r')
    plt.grid(True)

    fig1.savefig('Foo1.png')

    fig2 = plt.figure(2)
    plt.plot([0, 1, 2, 3, 4], [0, 5, 1, 9, 2], label="Test 2", color='g')
    plt.plot([0, 1, 2, 3, 4], [0, 10, 50, 0, 10],  label="Other Test 2",  color='r')
    plt.grid(True)

    fig2.savefig('Foo2.png')

    plt.show()

为了提供帮助,一些代码会很有帮助。http://stackoverflow.com/help/mcve - ODiogoSilva
非常抱歉,我原本打算这样做,但后来认为这似乎是一个普遍性问题,所以不需要。显然我错了,我会去更新主贴。 - Steve
不幸的是,您不能只是使用 del 删除您不想显示的图形,因为 mpl 会保留引用。而清除图形并不能阻止它显示。 - Alan
1个回答

15
您可以使用plt.close()在保存每个图形后立即关闭它。只需确保在最后一个图像之后不要执行关闭语句。
您的代码将如下所示:
fig1 = plt.figure(1)
plt.plot([0, 1, 2, 3, 4], [0, 1, 2, 3, 4], label="Test", color='g')
plt.plot([0, 1, 2, 3, 4], [0, 1, 4, 9, 16],  label="Other Test",  color='r')
plt.grid(True)

fig1.savefig('Foo1.png')
# add plt.close() after you've saved the figure
plt.close()

fig2 = plt.figure(2)
plt.plot([0, 1, 2, 3, 4], [0, 5, 1, 9, 2], label="Test 2", color='g')
plt.plot([0, 1, 2, 3, 4], [0, 10, 50, 0, 10],  label="Other Test 2",  color='r')
plt.grid(True)

fig2.savefig('Foo2.png')

plt.show()

就是这样!我知道我一直在忽略某些非常简单的东西。我以为 plt.close() 命令只能在显示图表后才能起作用,没想到它也可以在保存图表后使用。谢谢! - Steve
不用客气 - 很高兴能帮忙 :) - mishaF
3
Python 2.7 在 Windows 上出现了问题:这种方法会生成“无法调用"事件"命令:应用程序已被销毁”的错误提示。 具体表现为在执行程序时,会出现类似于以下代码的错误提示: “event generate $w <<ThemeChanged>>” 问题出现在“ttk::ThemeChanged”函数中的第6行,该函数被调用但无法正常执行。 - Alan
1
我在Python 3和Linux上也是一样的。 - iago-lito
有没有一种方法可以在不关闭其他图形的情况下实现这个? - dcxst

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接