似乎在matplotlib中创建图形的标准方式不像我在python中所期望的那样:默认情况下,在循环中调用fig = matplotlib.figure()
将保留所有创建的图形,并最终运行内存不足。
有quite a few个帖子处理变通办法,但要求对matplotlib.pyplot.close(fig)
进行显式调用似乎有些过时。我想要的是一个简单的方法来计算fig
引用,所以我不必担心内存泄漏。有办法做到这一点吗?
答案 0 :(得分:26)
如果您在不使用plt.figure
的情况下创建数字,则应按预期计算引用次数。例如(这也是使用非交互式Agg后端。)
from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
from matplotlib.figure import Figure
# The pylab figure manager will be bypassed in this instance.
# This means that `fig` will be garbage collected as you'd expect.
fig = Figure()
canvas = FigureCanvas(fig)
ax = fig.add_subplot(111)
答案 1 :(得分:3)
如果你只是保存数字而不是显示它们,你可以使用:
def savefig(*args, **kwargs):
plt.savefig(*args, **kwargs)
plt.close(plt.gcf())
这可以说也不过是hacky,不管怎样。