warning about too many open figures Ask Question

warning about too many open figures Ask Question

を使用して多数の図を作成するスクリプトで、 「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 ) から特定の図のインスタンスを削除し、ガベージ コレクションできるようにすると述べています。

おすすめ記事