我的问题很简单:我有一个使用matplotlib生成数字的python脚本。每次我运行它都会生成带有数字的新窗口。如何让脚本关闭上次运行时打开的窗口?
matlab中的类似命令是在matlab脚本的开头加上“全部关闭”。
我已经看到了一些建议,比如
import matplotlib.pyplot as plt
plt.close("all")
如果您从python shell运行脚本,此解决方案有效,例如使用
>>>> 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()
这应绘制一个漂亮的三相电源的理想波形。
答案 0 :(得分:75)
您可以通过调用matplotlib.pyplot.close
来关闭数字,例如:
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")
答案 1 :(得分:3)
请参阅Bi Rico对一般Eclipse案例的回答。
对于任何人 - 比如我 - 因为你有很多窗户并且你正在努力将它们全部关闭而落在这里,根据你的情况,杀死python会很有效。它几乎可以在任何情况下工作 - 包括使用Eclipse。
我刚刚从emacs中产生了60个图(我更喜欢eclipse)然后我认为我的脚本已经退出了。在我的ipython窗口中运行close('all')
对我来说不起作用,因为这些图不是来自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,也没有杀死更新管理器(杀死更新管理器可能是一个坏主意)......
答案 2 :(得分:0)
除了运行的当前脚本外,它不仅会杀死所有绘图窗口,而且会杀死所有称为python3的进程。它适用于python3。因此,如果您正在运行任何其他python3脚本,它将被终止。因为我一次只运行一个脚本,所以它为我完成了工作。
import os
import subprocess
subprocess.call(["bash","-c",'pyIDs=($(pgrep python3));for x in "${pyIDs[@]}"; do if [ "$x" -ne '+str(os.getpid())+' ];then kill -9 "$x"; fi done'])
答案 3 :(得分:-1)
在我的情况下,使用上述脚本没有任何效果,但是通过单击 Terminate ALL (两个红色的嵌套方形图标),我可以从Eclipse控制台栏中关闭这些数字。