小编典典

警告过多的开放数字

all

在我使用 创建许多图形的脚本中fix, ax = plt.subplots(...),我收到警告 RuntimeWarning:已打开 20
多个图形。 通过 pyplot 接口 ( matplotlib.pyplot.figure) 创建的图形会一直保留到显式关闭,并且可能会消耗太多内存。

但是,我不明白 为什么 会收到此警告,因为使用 保存图形后fig.savefig(...),我使用 删除它fig.clear(); del fig。在我的代码中,我一次打开的图形不止一个。尽管如此,我还是收到了关于开放数字过多的警告。这是什么意思/我怎样才能避免收到警告?


阅读 119

收藏
2022-06-04

共1个答案

小编典典

在您的图形对象上使用.clf.cla,而不是创建一个
图形。来自@DavidZwicker

假设您已导入pyplot

import matplotlib.pyplot as plt

plt.cla()清除一个轴,即当前图形中的当前活动轴。它使其他轴保持不变。

plt.clf()清除整个当前图形及其所有轴,但使窗口保持打开状态,以便可以将其重新用于其他绘图。

plt.close()关闭一个窗口,如果没有另外指定,它将是当前窗口。plt.close('all')将关闭所有打开的数字。

del fig不起作用的原因是pyplot状态机保持对周围图形的引用(如果它要知道“当前图形”是什么就必须这样做)。这意味着即使您删除了对图形
引用,也至少有一个活动引用,因此它永远不会被垃圾回收。

由于我在这里就这个答案的集体智慧进行投票,@JoeKington
在评论中提到plt.close(fig)将从
pylab 状态机 (
plt._pylab_helpers.Gcf
) 中删除特定图形实例并允许对其进行垃圾收集。

2022-06-04