3 de febrero de 2013

Exportar gráficas

Muchas de las gráficas que realizamos con matplotlib son usadas como parte de escritos científicos, estadísticos o de cualquier otra índole por lo que en esta entrada veremos como podemos exportar estas gráficas en archivos de imágenes.

La primera opción seria usar el botón guardar que se encuentra en la ventana que se crea al momento de  graficar.


Evidentemente esta es la opción mas fácil si tenemos pocas imágenes para exportar, sin embargo, si queremos realizar operaciones como guardar muchas imágenes, o poner nombres en secuencia, o guardar imágenes sin verlas primero este método no resulta ser muy efectivo. 

Otra forma de exportar una gráfica creada con matplotlib es haciendo uso de la instrucción savefig.

import numpy as np
import matplotlib.pyplot as plt

plt.plot([2, 7, 3, 1, 4])
plt.savefig('imagen.png')

El código anterior nos crea la siguiente imagen con formato png en la misma ruta donde se encuentra el script que utilizamos para crear y guardar la imagen.


Podemos ver como la extensión del archivo es definida junto al nombre de la imagen en un solo string.

De esta manera podemos realizar programas un poco mas complejos como el siguiente


import numpy as np
import random
import matplotlib.pyplot as plt

for i in range(1,11):
    datos = [random.randint(-10,10) for j in range(0,100)]
    #Lista por comprension que genera los datos de cada grafica.
    #Generamos 100 datos aleatorios entre -10 y 10 para cada grafica
    plt.title('Imagen #{0}'.format(i))
    plt.xlabel('Muestras')
    plt.ylabel('Amplitud')
    plt.axis([0, 100, -15, 15]) #[xmin, xmax, ymin, ymax]
    plt.plot(datos)
    plt.savefig('imagen{0}.png'.format(i))
    print 'Imagen {0} lista'.format(i)
    plt.clf() #Quita la figura actual para que no interfiera con la siguiente

El programa anterior genera 10 gráficas cada una con datos diferentes de forma aleatoria y las guarda en disco


La función savefig cuenta con algunos argumentos que pueden ser de ayuda como por ejemplo transparent el cual recibe un valor boleano (True o False) y determina si la gráfica tiene un fondo o es completamente transparente. Esto es especialmente util si se desea insertar la gráfica en una pagina con fondo de algún color y no se quiere dejar la gráfica con un fondo blanco.


plt.savefig('imagen.png', transparent=True)


Imagen transparente sobre un fondo negro

Para mas información sobre los argumentos que puede recibir la función savefig podemos ver la documentación de matplotlib sobre esta.

1 comentario: