Python

Generar figuras de alta resolución en Matplotlib

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.

ArchivoTamaño (KB)
figura_base.png20
figura_300dpi.png102
figura_600dpi.png220
figura_base.jpg17
figura_300dpi.jpg117
figura_600dpi.jpg319
Comparación de los tamaños de los archivos en función del formato y la resolución.

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.

¿Te ha parecido de utilidad el contenido?

Daniel Rodríguez

Share
Published by
Daniel Rodríguez
Tags: Matplotlib

Recent Posts

Cómo Detectar Pseudo-IDs y Data Leakage en el Constructor de Scorecards

El artículo Data Leakage en Credit Scoring explicó por qué este es el error más…

6 horas ago

Cómo Verificar la Normalidad de tus Datos antes de un Test Estadístico

Antes de aplicar muchos tests estadísticos clásicos (el t-test, el ANOVA, la regresión lineal) aparece…

5 días ago

Docker Compose: el día a día. Cómo ver qué funciona y qué no

Si acabas de montar tu aplicación en Docker Compose, la primera pregunta que haces cada…

1 semana ago

Migrar tslane a un paquete dual CommonJS y ESM con tsup y Vitest

tslane es la plantilla que uso como punto de partida para mis librerías TypeScript, nacida…

2 semanas ago

Cómo construir tu primer scorecard paso a paso

En los artículos anteriores de esta serie vimos la teoría detrás del credit scoring: qué…

2 semanas ago

Actualizar expresslanets a ES Modules con tsx y Vitest

expresslanets es la plantilla de API REST con Express y TypeScript que empezó como una…

3 semanas ago

This website uses cookies.