python-从eclipse运行时,关闭matplotlib中预先存在的图形

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

这应该绘制出理想的波形,以提供良好的三相电源。

AnjoMan asked 2019-10-09T11:23:44Z
2个解决方案
74 votes

您可以通过调用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 answered 2019-10-09T11:24:02Z
3 votes

有关一般的Eclipse案例,请参见Bi Rico的答案。

对于像我这样落地的任何人,因为您有很多窗户,而您正努力关闭所有窗户,根据您的具体情况,杀死python可能是有效的。 它几乎可以在任何情况下都可以工作-包括Eclipse。

我刚刚从emacs生成了60个地块(我更喜欢蚀),然后我以为我的脚本已经退出。 在我的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,也没有杀死更新管理器(杀死更新管理器可能不是一个好主意)...

sage answered 2019-10-09T11:24:56Z
translate from https://stackoverflow.com:/questions/15012309/close-pre-existing-figures-in-matplotlib-when-running-from-eclipse