を使用して多数の図を作成するスクリプトで、 「RuntimeWarning: More than 20 figures have been opened. Figures created through the pyplot interface ( ) are kept until allocated until allocated and may use memory over to.」というfix, ax = plt.subplots(...)
警告が表示されます。matplotlib.pyplot.figure
しかし、で図を保存した後、 で削除しているのに、なぜこの警告が表示されるのかわかりません。コード内で一度に複数の図を開いていることはありません。それでも、開いている図が多すぎるという警告が表示されます。これはどういう意味ですか。警告が表示されないようにするにはどうすればよいですか。fig.savefig(...)
fig.clear(); del fig
ベストアンサー1
新しいフィギュアを作成する代わりに、フィギュアオブジェクトで.clf
または を使用します。@DavidZwickerより.cla
pyplot
次のようにインポートしたと仮定します
import matplotlib.pyplot as plt
plt.cla()
軸、つまり現在の図の現在アクティブな軸をクリアします。他の軸はそのまま残ります。
plt.clf()
現在の図全体とそのすべての軸をクリアしますが、ウィンドウは開いたままにして、他のプロットに再利用できるようにします。
plt.close()
特に指定がない場合は、現在のウィンドウとなるウィンドウを閉じますplt.close('all')
。開いているすべての図を閉じます。
del fig
これが機能しない理由pyplot
は、ステート マシンが図への参照を保持しているためです (「現在の図」が何であるかを知るためには、参照を保持する必要があります)。つまり、図への参照を削除しても、少なくとも 1 つのライブ参照が存在するため、ガベージ コレクションされることはありません。
私はこの回答のために集合知に投票しているので、@JoeKington はコメントで、plt.close(fig)
pylab ステート マシン ( plt._pylab_helpers.Gcf ) から特定の図のインスタンスを削除し、ガベージ コレクションできるようにすると述べています。