72

私の質問は簡単です。matplotlib を使用して図を生成する python スクリプトがあります。実行するたびに、図を含む新しいウィンドウが生成されます。スクリプトを前回実行したときに開いていたウィンドウを閉じるにはどうすればよいですか?

matlab の類似のコマンドは、matlab スクリプトの先頭に「すべて閉じる」を配置することです。

次のようなことをするためのいくつかの提案を見てきました

import matplotlib.pyplot as plt
plt.close("all")

このソリューションは、Python シェルからスクリプトを実行する場合に機能します。

>>>> execfile("myScript.py")

ただし、Eclipse / PyDev を使用してスクリプトを実行すると、これが機能しないことがわかりました。Eclipseで動作させるにはどうすればよいですか?

例:

from numpy import *
from matplotlib.pyplot import *
from scipy import *

close("all") 
    #close any previously open plots - this doesn't work when running via Eclipse

t = linspace(0, 0.1,1000)
w = 60*2*pi

figure()
plot(t,cos(w*t))
plot(t,cos(w*t-2*pi/3))
plot(t,cos(w*t-4*pi/3))
show()

これにより、優れた 3 相電源の理想的な波形がプロットされるはずです。

4

4 に答える 4

91

を呼び出すことmatplotlib.pyplot.closeで Figure を閉じることができます。次に例を示します。

from numpy import *
import matplotlib.pyplot as plt
from scipy import *

t = linspace(0, 0.1,1000)
w = 60*2*pi


fig = plt.figure()
plt.plot(t,cos(w*t))
plt.plot(t,cos(w*t-2*pi/3))
plt.plot(t,cos(w*t-4*pi/3))
plt.show()
plt.close(fig)

呼び出して、開いているすべての図を閉じることもできますmatplotlib.pyplot.close("all")

于 2013-02-21T21:39:02.657 に答える
3

一般的なEclipseのケースについては、Bi Ricoの回答を参照してください。

私のように、たくさんのウィンドウがあり、すべてを閉じるのに苦労しているためにここにたどり着いた人にとっては、状況によっては python を殺すだけでも効果的です。おそらく、Eclipse を含むほとんどすべての状況で動作します。

emacs から 60 個のプロットを生成したところ (日食よりも好きです)、スクリプトが終了したと思いました。close('all')プロットがipythonからのものではないため、ipythonウィンドウで実行してもうまくいきませんでした。そのため、実行中のpythonプロセスを探すことにしました。

スクリプトを実行しているインタープリターを強制終了すると、60 個のプロットすべてが閉じられました。たとえば、

$ ps aux | grep python
rsage    11665  0.1  0.6 649904 109692 ?       SNl  10:54   0:03 /usr/bin/python3 /usr/bin/update-manager --no-update --no-focus-on-map
rsage    12111  0.9  0.5 390956 88212 pts/30   Sl+  11:08   0:17 /usr/bin/python /usr/bin/ipython -pylab
rsage    12410 31.8  2.4 576640 406304 pts/33  Sl+  11:38   0:06 python3 ../plot_motor_data.py
rsage    12431  0.0  0.0   8860   648 pts/32   S+   11:38   0:00 grep python

$ kill 12410

ipython/pylab を強制終了したり、更新マネージャーを強制終了したりしていないことに注意してください (更新マネージャーを強制終了するのはおそらく悪い考えです)...

于 2015-12-03T18:41:30.870 に答える