1. ホーム
  2. パイソン

[解決済み] 開いている数字が多すぎる場合の警告

2022-04-08 17:07:22

質問

で多くの図形を作成するスクリプトで fix, ax = plt.subplots(...) という警告が表示されます。 RuntimeWarning: 20個以上の図形が開かれています。pyplotインターフェースで作成された図( matplotlib.pyplot.figure は、明示的に閉じるまで保持され、メモリを過剰に消費する可能性があります。

しかし、私が理解できないのは なぜ この警告が表示されるのは、図の保存時に fig.savefig(...) で削除し、さらに fig.clear(); del fig . 私のコードでは、一度に複数の図を開いていることはありません。それでも、開いている図形が多すぎるという警告が表示されます。 これは何を意味するのでしょうか?

解決方法は?

使用方法 .clf または .cla を作成するのではなく、図オブジェクトに 新しい の図になります。から デービッド・ズウィッカー

をインポートしたと仮定すると pyplot として

import matplotlib.pyplot as plt

plt.cla() 軸を消去します。 つまり、現在の図の中で現在アクティブな軸です。他の軸はそのままにしておきます。

plt.clf() 現在の図形をすべて消去します は、そのすべての軸を含むウィンドウを開いたままにして、他のプロットで再利用できるようにします。

plt.close() ウィンドウを閉じる 特に指定がなければ、カレントウィンドウとなります。 plt.close('all') は、開いているすべての図形を閉じます。

というのは del fig が機能しないのは pyplot 状態マシンは、図への参照を保持します(「現在の図」が何であるかを知るためには必要なことです)。つまり、たとえ あなたの への参照は、少なくとも1つ残っており、ガベージコレクションされることはありません。

この回答については、ここの集合知にポーリングしているので、@JoeKington がコメントで次のように言及しています。 plt.close(fig) は、パイラブのステートマシンから特定の図のインスタンスを削除します( plt._pylab_helpers.Gcf を使用し、ガベージコレクトされるようにします。