matplotlib数字在show()和savefig()之间消失

2Ni*_*meo 8 python matplotlib

我在字典中保留了一组数字参考,以便我可以在以后保存它们.我很困扰,如果调用show()命令并首先查看它们,保存的数字是空白的.由于show()命令阻止而且我没有使用类似spyder的解释器,所以在我到达之前我必须关闭这些数字savefig()

figures['myfig_1'] = figure()
...
figures['myfig_n'] = figure()
...

#show() #disabling this makes the problem go away
print "Saving:"
for fig in figures:
   figure(figures[fig].number)
   savefig(fig)
   print "Figure " + str(figures[fig].number) + ": " + fig
Run Code Online (Sandbox Code Playgroud)

这里的print语句给了我指示字典仍然完整,我认为这意味着我没有丢失图形引用(它们仍然在它们的.number属性中返回有意义的数字.)

我注意到的另一个问题是,当我在类中完成类似的操作时,将字典存储为成员并将存储分开并将函数保存到自己的方法中,这不会发生.有什么关于我关闭数字或存储数据的方式,这使得数据松散他们的数据?

Joe*_*ton 7

一般来说,在这种情况下,不要使用matplotlib的交互式matlab-ish状态机接口.它适用于交互式使用.

你试图让一个数字"活跃",然后创建一个新的数字.如果只保留返回的图形和/或轴对象并直接使用它们,则哪个图形处于活动状态并不重要.(另外,不要使用通配符导入!稍后当你维护代码时,你后悔!)

做这样的事情:

import matplotlib.pyplot as plt
figures = {}

figures['a'] = plt.figure()
ax = figures['a'].add_subplot(111)
ax.plot(range(10), 'ro-')

figures['b'] = plt.figure()
ax = figures['b'].add_subplot(111)
ax.plot(range(10), 'bo-')

plt.show()

for name, fig in figures.iteritems():
    fig.savefig('figure-%s.png' % name)
Run Code Online (Sandbox Code Playgroud)


2Ni*_*meo 2

文档来看,绘图元素是否被销毁取决于show()后端matplotlib 的版本。1.1.0 版本似乎可以不破坏人物。要确定正在使用哪个后端,请使用该get_backend()函数。就我而言,我使用的是 Qt4Agg 后端。通过调用 TkAgg 后端,通过调用,matplotlib.use('TkAgg')人物在保存之前不会被破坏。现在了解如何更改 Qt4Agg 的行为...