我想使用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()
命令是多余的吗?无论我是否愿意,它似乎没有什么不同。
非常感谢提前。
答案 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))
优点是您不必担心哪个图形或轴是“活动的”,您只需要引用特定的轴或图形对象。