在我创建许多人物的脚本中fix, ax = plt.subplots(...)
,我收到警告运行时警告:已打开超过 20 个数字。通过 pyplot 接口创建的图形(matplotlib.pyplot.figure
)会保留到显式关闭为止,并且可能会消耗太多内存。
然而我不明白why我收到此警告,因为在保存数字后fig.savefig(...)
,我用删除它fig.clear(); del fig
。在我的代码中,我每次都不会打开多个图形。尽管如此,我还是收到了关于开放数字过多的警告。这是什么意思/我怎样才能避免收到警告?
Use .clf
or .cla
在你的图形对象上而不是创建一个new数字。从@大卫兹威克
假设你已经导入了pyplot
as
import matplotlib.pyplot as plt
plt.cla()清除轴,即当前图形中当前活动的轴。它保持其他轴不变。
plt.clf()清除整个当前图形及其所有轴,但使窗口保持打开状态,以便可以将其重新用于其他绘图。
plt.close()关闭一个窗口,如果没有另外指定,这将是当前窗口。plt.close('all')
将关闭所有打开的数字。
原因是del fig
不起作用的是pyplot
状态机保留对周围图形的引用(如果它想知道“当前图形”是什么,就必须这样做)。这意味着即使你删除了your参考图中,至少有一个实时参考,因此它永远不会被垃圾收集。
由于我在这里对集体智慧进行投票以获得这个答案,@JoeKington 在评论中提到plt.close(fig)将从 pylab 状态机中删除特定的图形实例(plt._pylab_helpers.Gcf)并允许它被垃圾收集。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)