在我使用 fix, ax = plt.subplots(...)
创建许多图形的脚本中,我收到警告 RuntimeWarning: More more than 20 figures have been opened。通过 pyplot 接口 ( matplotlib.pyplot.figure
) 创建的图形将保留到明确关闭,并且可能会消耗太多内存。
但是,我不明白 为什么 会收到此警告,因为在使用 fig.savefig(...)
保存图形后,我使用 fig.clear(); del fig
将其删除。在我的代码中,我一次打开不止一个图形。尽管如此,我还是收到了太多开放数字的警告。这是什么意思/我怎样才能避免收到警告?
原文由 andreas-h 发布,翻译遵循 CC BY-SA 4.0 许可协议
在图形对象上使用
.clf
或.cla
而不是创建 新 图形。来自 @DavidZwicker假设您已导入
pyplot
作为plt.cla()
清除一个轴,即当前图中当前活动的轴。它使其他轴保持不变。plt.clf()
清除整个当前图形 及其所有轴,但保持窗口打开,以便它可以重新用于其他绘图。plt.close()
关闭一个窗口,如果没有另外指定,这将是当前窗口。plt.close('all')
将关闭所有打开的图形。del fig
不起作用的原因是pyplot
状态机保持对周围数字的引用(因为它必须知道“当前数字”是什么).这意味着即使 您 删除了对图形的引用,至少还有一个实时引用,因此它永远不会被垃圾回收。由于我在这里征求集体智慧来回答这个问题,@JoeKington 在评论中提到
plt.close(fig)
将从 pylab 状态机 ( plt._pylab_helpers.Gcf ) 中删除一个特定的图形实例并允许它被垃圾收集。