Generar figuras de alta resolución en Matplotlib

Publicado el 26 julio 2022 por Daniel Rodríguez @analyticslane

Por defecto la resolución con la que se crean las figuras en Matplotlib es de 72 puntos por pulgada (ppp), el valor estándar de las pantallas tradicionales. Aunque esta configuración es insuficiente en el caso de que se desee imprimir la gráfica o esta se visualice en una pantalla HiDPI o Retina. A la hora de trabajar con Jupyter se puede cambiar la configuración para doblar la resolución, aumentado esta hasta los 144 ppp. Pero en el caso de que el destino de las figuras sea un documento impreso, es necesario aumentar aún más la resolución de estas. Veamos cómo se pueden crear archivos con figuras de alta resolución en Matplotlib.

Guardar las figuras creadas con savefig()

Una vez creada una figura en Matplotlib, el método savefig() permite guardar esta es un archivo. Para lo que solamente hay que indicar el nombre del documento en el que se desea guardar la gráfica. Usando el método la extensión del archivo para seleccionar el formato, aunque también se puede indicar de forma explícita mediante la propiedad format.

Como se ha comentado anteriormente la resolución con la que se guardan las imágenes por defecto es de 72 ppp. Para fijar otra resolución solamente se tiene que indicar el valor deseado mediante la propiedad dpi. Así, se puede generar la misma figura con 72, 300 y 600 ppp tanto en formato PNG como JPG con el siguiente código.

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, np.pi, 200)
y = np.cos(3 * np.pi * x)

plt.plot(x, y, '--r')
plt.xlabel('Tiempo')
plt.ylabel('Amplitud')

# Figuras en formato PNG
plt.savefig("figura_base.png")
plt.savefig("figura_300dpi.png", dpi=300)
plt.savefig("figura_600dpi.png", dpi=600)

# Figuras en formato JPG
plt.savefig("figura_base.jpg")
plt.savefig("figura_300dpi.jpg", dpi=300)
plt.savefig("figura_600dpi.jpg", dpi=600)

Obteniendo en el archivo figura_base.png la siguiente imagen.

Figura PNG creada con la resolución por defecto en Matplotlib

Mientras que en el archivo figura_600dpi.png se obtiene la siguiente figura de mayor resolución.

Figura PNG creada con la resolución de 600 ppp en Matplotlib

Obviamente la calidad de esta segunda es mucho mayor que la primera. Aunque esto es algo que repercute en el tamaño del archivo, pasando en el ejemplo de 20 a 319 KB. En concreto el tamaño de los seis archivos se puede ver en la siguiente tabla.

Los valores dependen de la complejidad de la figura, por lo que para otras gráficas pueden ser tanto mayores como menores los mostrados.

Conclusiones

En esta entrada se ha visto cómo se puede usar la propiedad dpi de savefig() para generar archivos con figuras de alta resolución en Matplotlib. Una propiedad que es importante cuando se desea utilizar las gráficas de Matplotlib en documentos impresos.