从Eclipse运行时,关闭matplotlib中现有的图形


68

我的问题很简单:我有一个使用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()

这样可以绘制出理想的波形,以获得良好的三相电源。

Answers:


87

您可以通过调用来关闭图形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")


3
这可以从控制台(例如,在python shell中运行'>>> execfile(“ script.py”)')运行,但不能在Eclipse / PyDev中运行。有什么不同?
AnjoMan

真好 为cos(w * t-4 * pi / 3)添加一个随机向量以消除噪声。
2014年

8
@AnjoMan为什么接受这个答案?它显然无法回答您的问题。
dbliss 2015年

5
@dbliss,我真的不记得了。我认为我解决此问题的方法是“不要使用日食”。
AnjoMan

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,也没有杀死更新管理器(杀死更新管理器可能不是一个好主意)...


+1我在使用PyCharm时遇到了类似的问题,对我来说,关键是杀死由PyCharm编辑器生成的python进程,并在其他Emacs / Eclipse / PyDev中进行猜测。在PyCharm中,这只是单击底部窗口中的红色“ X”。
shelbypereira

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'])

-1

在我的情况下,使用上面的脚本没有任何效果,但是我可以通过单击Terminate ALL(两个红色的嵌套方形图标)从Eclipse控制台栏中关闭这些图形。


仔细阅读问题。作者要求一种关闭脚本的方法。>脚本如何关闭上次运行时打开的窗口?
Liastre

你不能。我认为有人问这个问题需要关闭这些窗口而不关闭日食。
Ibraheem
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.