Python - Salvar gráficas sin mostrarlas.

 
Vista:
Imágen de perfil de Zhisi

Salvar gráficas sin mostrarlas.

Publicado por Zhisi (21 intervenciones) el 26/10/2016 11:05:25
Hola una vez más.
Estoy con un código aprendiendo a generar gráficas a partir de datos. Mi idea era guardar las gráficas sin abrir la imagen en pantalla, pero no veo el modo de hacerlo ya que para salvarla, primero he de generarla y para generarla necesito mostrarla en pantalla.
En el caso en el cual sólo generase un par de imágenes, mi único problema sería cerrar todas las ventanas abiertas una vez finalizada la ejecucuión del código. Sin embargo quiero salvar muchas gráficas y al final colapsa y me da el siguiente mensaje:

"
C:\Python27\lib\site-packages\matplotlib\pyplot.py:424: RuntimeWarning: More than 20 figures have been opened. Figures created through the pyplot interface (`matplotlib.pyplot.figure`) are retained until explicitly closed and may consume too much memory. (To control this warning, see the rcParam `figure.max_open_warning`).
max_open_warning, RuntimeWarning)
"

Es decir, que mi pc se queda sin memoria (o eso entiendo)

Me planteo como solución dos cosas:
1- Almacenar las gráficas sin mostrarlas en pantalla.
2- Cerrar la imagen que se muestra en pantalla inmediatamente después de mostrarla para liberar memoria.

Pero no sé cómo hacerlo en ninguno de los dos casos. He buscado en la red, pero no encuentro nada o no lo entiendo. ¿Conocéis algún comando para hacer alguna de estas dos cosas?

A continuación muestro una parte del código:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import numpy as np                     # Libreria matematica.
from PIL import Image                  # Libreria para imagenes.
import matplotlib.pyplot as plt        # Libreria para graficas.
 
 
def ploteos (imagen,data,direccion,j):
    ## Almacena imagenes generadas
 
    ## Codigo de color de la imagen en 2D.        
    # Creamos el nombre del archivo.
    nom1 = '0%s Codigo de color.png' % j
    # Creamos la figura.        
    plt.figure(nom1)
    # Representamos imagen con codigo de color.     
    plt.imshow(imag)
    # Salvamos la imagen.
    plt.savefig(direccion + '/0%s Codigo de color.png' % j)
 
    ## Gráfica datos.
    nom2 = '0%s Perfil de contraste.png' % j
    plt.figure(nom2)
    plt.plot(data)
    plt.savefig(direccion + '/0%s Perfil de contraste.png' % j)

Como siempre, muchas gracias.



EDITO:
A veces tener que explicar las cosas que no entiendes te ayuda a entenderlas y he encontrado la solución a la segunda opción que planteaba. Es lo más sencillo que podía ser. Simplemente hay que añadir el comando: "plt.close()" después de salvar cada figura.

Eso sí, la otra solución que planteaba sigo sin saber si se puede hacer y en todo caso cómo se hace.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Zhisi

Salvar gráficas sin mostrarlas.

Publicado por Zhisi (21 intervenciones) el 26/10/2016 11:56:25
Resulta que la segunda solución en realidad tampoco soluciona mi problema. Sigue saturándose la memoria.

Por lo tanto, ¿qué puedo hacer para evitar este problema?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Zhisi

Salvar gráficas sin mostrarlas.

Publicado por Zhisi (21 intervenciones) el 26/10/2016 14:15:12
Bueno, pues creo que he encontrado una forma de que no se cuelgue o al menos no tan fácilmente.
Trabajo con Spyder. Introduciendo esta linea de código, simplemente deja de funcionar " el modo interactivo" y listo:
1
plt.ioff()
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar