在从 eclipse 运行时关闭 matplotlib 中预先存在的图

我的问题很简单: 我有一个 Python 脚本,它使用 matplotlib 生成图形。每次我运行它都会生成新的带图形的窗口。如何让脚本关闭上次运行时打开的窗口?

Matlab 中的类似命令是将“ close all”放在 matlab 脚本的开头。

我已经看到了一些建议去做类似的事情

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

如果您从 pythonshell 运行脚本,这个解决方案就可以工作,例如使用

>>>> 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()

这应该绘制理想的波形为一个不错的三相电源。

166428 次浏览

你可以通过调用 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")关闭所有打开的数字

请参阅 Bi Rico 对一般 Eclipse 情况的回答。

对于任何人-像我-谁降落在这里,因为你有很多窗口,你正在努力关闭它们所有,只是杀死巨蟒可以有效,取决于你的情况。它可能在几乎任何情况下都可以工作——包括 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,也没有杀死更新管理器(杀死更新管理器可能是一个坏主意) ..。

它不仅会杀死所有绘图窗口,还会杀死除了当前运行的脚本之外的所有名为 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'])

在我的案例中,使用上面的脚本没有什么效果,但是我能够通过点击 终结一切(两个红色嵌套的正方形图标)从 Eclipse 控制台关闭这些数字。