使用Python的matplotlib选择哪些图形显示在屏幕上,哪些保存到文件中
我想在Python中使用 matplotlib.pyplot
创建不同的图形。然后,我希望将其中一些图形保存到文件中,而其他的则通过 show()
命令在屏幕上显示。
不过,show()
会显示我创建的 所有 图形。如果我不想在屏幕上显示某些图形,可以在创建这些图形后调用 close()
,就像下面的代码一样:
import matplotlib.pyplot as plt
y1 = [4, 2, 7, 3]
y2 = [-7, 0, -1, -3]
plt.figure()
plt.plot(y1)
plt.savefig('figure1.png')
plt.close()
plt.figure()
plt.plot(y2)
plt.show()
plt.close('all')
这样可以保存第一个图形并显示第二个图形。但是,我收到了一个错误信息:
无法调用 "event" 命令:在执行时应用程序已被销毁
有没有更优雅的方法来选择显示哪些图形呢?
另外,第一个 figure()
命令是多余的吗?似乎无论我是否使用它,结果都没有什么不同。
非常感谢!
2 个回答
3
一般来说,你可以直接关闭图形。举个简单的例子:
import matplotlib.pyplot as plt
fig1 = plt.figure()
plt.plot(range(10), 'ro-')
plt.title('This figure will be saved but not shown')
fig1.savefig('fig1.png')
plt.close(fig1)
fig2 = plt.figure()
plt.plot(range(10), 'bo')
plt.title('This figure will be shown')
plt.show()
至于第一次调用 plt.figure()
是否多余,这要看你在做什么。通常情况下,你会想保留它返回的图形对象,然后用这个对象来操作,而不是使用 matplotlib 那种类似 MATLAB 的状态机接口。
当你制作更复杂的图表时,增加一行代码来做这样的事情通常是值得的:
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.plot(range(10))
这样做的好处是,你不需要担心哪个图形或坐标轴是“活动”的,你只需引用特定的坐标轴或图形对象就可以了。
4
更好的方法是使用 plt.clf()
,而不是 plt.close()
。另外,plt.figure()
是用来创建一个新的图表,而你可以用 plt.clf()
来清空之前的图表:
import matplotlib.pyplot as plt
y1 = [4, 2, 7, 3]
y2 = [-7, 0, -1, -3]
plt.figure()
plt.plot(y1)
plt.savefig('figure1.png')
plt.clf()
plt.plot(y2)
plt.show()
plt.clf()
这段代码不会产生错误或警告,比如“无法调用‘事件’命令...”这样的提示。