选择要在屏幕上显示的数字以及使用Python的matplotlib保存到文件的数据

时间:2011-05-23 06:17:48

标签: python matplotlib

我想使用matplotlib.pyplot在Python中创建不同的数字。然后,我想将其中的一些保存到文件中,而其他人则应使用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 个答案:

答案 0 :(得分: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()

此代码不会生成错误或警告,例如无法调用“event”命令...

答案 1 :(得分:2)

一般来说,你可以关闭这个数字。作为一个简单的例子:

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-ish状态机接口。

当您制作更复杂的图形时,通常需要额外的代码行来执行以下操作:

fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.plot(range(10))

优点是您不必担心哪个图形或轴是“活动的”,您只需要引用特定的轴或图形对象。