web-dev-qa-db-ja.com

すべてのpyplotウィンドウ(以前のスクリプト実行のウィンドウを含む)を閉じるにはどうすればよいですか?

したがって、私はいくつかのpythonコードを使用して、pyplotを使用していくつかのグラフをプロットします。スクリプトを実行するたびに、新しいプロットウィンドウが作成され、手動で閉じる必要があります。開いているすべてのpyplotウィンドウを閉じる方法スクリプトの開始、つまり、スクリプトの前回の実行中に開いたウィンドウを閉じるなど。

MatLabでは、これはcloseallを使用するだけで実行できます。

13
Ron Ronson

スクリプトから開いているすべてのFigureを閉じるには、次を呼び出します。

plt.close('all')

または、関連するPythonプロセスを終了できます。

10
jakevdp
_import matplotlib.pyplot as plt
plt.close("all")
_

(既にpyplotがインポートされている場合は、明らかにそれを再度インポートする必要はありません。その場合は、pltplt.close("all")でpyplotに選択したエイリアスに置き換えてください。インポートしました。)

1
Adrian

私は同じ問題を抱えていました。複数のプロットウィンドウを生成する関数を呼び出します。関数を呼び出すたびに、ポップアップされたプロットウィンドウが累積されます。関数の先頭でmatplotlib.pyplot.close('All')を試しても問題は解決しませんでした。私はmatplotlib.pyplot.close(figure)を呼び出すことで問題を解決しました。ここで、figureはプロット図のインスタンス(オブジェクト)です。プロット図オブジェクトのリストを保持しています。したがって、リストを保持し、Figureオブジェクトの各インスタンスに対してmatplotlib.pyplot.close(figure)を呼び出すことをお勧めします。

import matplotlib.pyplot as plot

プロットインスタンスオブジェクト(図、軸)をリストに追加します。

fig, (ax1,ax2) = plt.subplots(nrows=2)
figAxisDict = {'figure': fig, 'axis1': ax1, 'axis2':ax2}

figAxisList.append(figAxisDict)

図を閉じるための関数を呼び出し、後でリストをクリアします。

if len(figAxisList) !=0:

    for figAxis in figAxisList:
        figure=figAxis['figure']

        plot.close(figure)

    figAxisList[:]=[] 
0
user3597222

スクリプト自体からこれを自動的に行う簡単な解決策はないようです:pycharm内のすべての既存の数値を閉じるためのおそらく最も簡単な方法は、対応するプロセスを強制終了することです(jakevdpが彼のコメントで示唆したように)。

メニューの実行\停止...(Ctrl-F2)。数秒の遅延でウィンドウが閉じていることがわかります。

0
FlorianH

このソリューションでは、以前の実行からのプロットを閉じることはできませんが、それらを開いたままにすることはできません!

これらの「ぶら下がっている」数字を閉じるために私が見つけた唯一の方法は、プロセスを見つけて殺すことです。

非ブロッキング方式でプロットしてから、入力を求めます。これにより、プロットを適切に閉じることを忘れないようにする必要があります。

plt.show(block=False)
plt.pause(0.001) # Pause for interval seconds.
input("hit[enter] to end.")
plt.close('all') # all open plots are correctly closed after each run
0
Ian Zurutuza