问题描述
|
我想使用
matplotlib.pyplot
在Python中创建不同的图形。然后,我想将其中一些保存到文件中,而其他一些则应使用show()
命令显示在屏幕上。
但是,ѭ1显示所有创建的图形。我可以通过创建不想在屏幕上显示的图后调用ѭ3来避免这种情况,如以下代码所示:
import matplotlib.pyplot as plt
y1 = [4,2,7,3]
y2 = [-7,-1,-3]
plt.figure()
plt.plot(y1)
plt.savefig(\'figure1.png\')
plt.close()
plt.figure()
plt.plot(y2)
plt.show()
plt.close(\'all\')
这将保存第一个图形并显示第二个图形。但是,我收到一条错误消息:
无法调用“事件”命令:应用程序在执行时已被破坏
是否可以更优雅地选择要显示的人物?
另外,第一个“ 5”命令是否多余?不管我给与否,这似乎都没有什么不同。
提前谢谢了。
解决方法
更好的方法是使用
plt.clf()
代替plt.close()
。
此外,plt.figure()
会创建一个新图形,而您只需使用with6ѭ清除上一个图形即可:
import matplotlib.pyplot as plt
y1 = [4,2,7,3]
y2 = [-7,-1,-3]
plt.figure()
plt.plot(y1)
plt.savefig(\'figure1.png\')
plt.clf()
plt.plot(y2)
plt.show()
plt.clf()
此代码不会生成错误或警告,例如无法调用“事件”命令...
,一般来说,您可以关闭数字。作为一个简单的例子:
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))
优点是您不必担心哪个图形或轴是“活动的”,您只需要引用特定的轴或图形对象即可。