31

matplotlib で図を作成する標準的な方法は、Python で期待するように動作しないようです。デフォルトでfig = matplotlib.figure()は、ループを呼び出すと、作成されたすべての図が保持され、最終的にメモリが不足します。

回避策を扱った投稿はかなり あり ますmatplotlib.pyplot.close(fig)が、明示的な呼び出しを要求するのは少しハックのようです。私が望むのは、fig参照をカウントする簡単な方法であるため、メモリ リークを心配する必要はありません。これを行う方法はありますか?

4

3 に答える 3

34

を使用せずに図を作成すると、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)
于 2013-05-02T12:20:36.963 に答える
7

Figure を表示するのではなく、保存するだけの場合は、次を使用できます。

def savefig(*args, **kwargs):
    plt.savefig(*args, **kwargs)
    plt.close(plt.gcf())

これは間違いなくハックですが、何でもあります。

于 2016-05-26T03:24:56.507 に答える