python - real - Cerrar figuras preexistentes en matplotlib cuando se ejecuta desde eclipse
matplotlib python 3 (2)
Mi pregunta es simple: tengo un script de Python que genera figuras usando matplotlib. Cada vez que lo ejecuto, genera nuevas ventanas con figuras. ¿Cómo puedo hacer que el script cierre las ventanas que se abrieron la vez anterior?
el comando análogo en matlab es poner ''cerrar todo'' al comienzo de su script matlab.
He visto varias sugerencias para hacer algo como
import matplotlib.pyplot as plt
plt.close("all")
Esta solución funciona si ejecuta su secuencia de comandos desde el shell de Python, por ejemplo, usando
>>>> execfile("myScript.py")
Sin embargo, he encontrado que esto no funciona si ejecuto el script usando Eclipse / PyDev. ¿Cómo puedo hacer que funcione en Eclipse?
ejemplo:
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()
Esto debería trazar las formas de onda ideales para una buena fuente de alimentación trifásica.
Puede cerrar una figura llamando a matplotlib.pyplot.close
, por ejemplo:
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)
También puede cerrar todas las figuras abiertas llamando a matplotlib.pyplot.close("all")
Vea la respuesta de Bi Rico para el caso general de Eclipse.
Para cualquiera, como yo, que aterriza aquí porque tiene muchas ventanas y está luchando por cerrarlas todas, matar a Python puede ser efectivo, dependiendo de sus circunstancias. Probablemente funcione bajo casi cualquier circunstancia, incluso con Eclipse.
Acabo de generar 60 tramas de emacs (prefiero que eclipsar) y luego pensé que mi script había salido. Correr close(''all'')
en mi ventana de ipython no funcionó porque las tramas no vinieron de ipython, así que recurrí a buscar ejecutar procesos de python.
Cuando maté al intérprete que ejecutaba el guión, entonces las 60 tramas estaban cerradas, por ejemplo,
$ 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
Tenga en cuenta que no maté mi ipython / pylab, ni maté al administrador de actualizaciones (matar al administrador de actualizaciones es probablemente una mala idea) ...