从eclips运行时关闭matplotlib中已有的图形

2024-04-19 11:27:09 发布

您现在位置:Python中文网/ 问答频道 /正文

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

matlab中类似的命令是在matlab脚本的开头加上“close all”。

我看到一些建议,比如

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

这应该绘制出理想的三相电源波形。


Tags: fromimport脚本图形closeplotmatplotlibpi
3条回答

可以通过调用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")来关闭所有打开的图形

它不仅会杀死所有绘图窗口,还会杀死所有名为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'])

关于日全食的案例,请参见Bi Rico的答案。

对于任何人-像我-谁在这里降落,因为你有很多窗口,你正在努力关闭他们所有,只是杀死Python可以有效,取决于你的情况。它可能在几乎任何情况下都能工作——包括Eclipse。

我刚从emacs生成了60个图(比起eclipse我更喜欢这个),然后我认为我的脚本已经退出了。在我的I python窗口中运行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,也没有杀死更新管理器(杀死更新管理器可能是个坏主意)。。。

相关问题 更多 >