Saltar al contenido principal
Capítulo 1.3 básico matplotlib seaborn visualización

Visualización rápida con matplotlib

3 min lectura
Crea gráficas claras de series temporales: líneas, áreas, múltiples series y anotaciones con matplotlib y seaborn.

Una buena gráfica vale más que mil tablas. En series temporales, la visualización no es decorativa: es el primer paso del análisis. Antes de aplicar cualquier modelo, necesitas ver qué forma tiene la serie.

En este subcapítulo aprenderás a crear las cuatro gráficas más útiles: línea simple, área, múltiples series y destacado de picos.


Línea simple con estilo

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

fechas = pd.date_range(start="2023-01-01", periods=365, freq="D")
ventas = 100 + np.cumsum(np.random.randn(365) * 2) + 10 * np.sin(2 * np.pi * np.arange(365) / 365.25 * 12)

plt.figure(figsize=(12, 5))
plt.plot(fechas, ventas, color="#1a1a1a", linewidth=1.8)
plt.title("Ventas diarias durante 2023", fontsize=14, fontweight="bold")
plt.xlabel("Fecha")
plt.ylabel("Ventas")
plt.grid(True, alpha=0.3, linestyle="--")
plt.tight_layout()
plt.show()

Tres detalles hacen la diferencia: tamaño de figura adecuado, línea fina pero visible, y rejilla sutil.


Gráfica de área

Cuando quieres enfatizar la magnitud acumulada, una gráfica de área funciona mejor que una línea.

plt.figure(figsize=(12, 5))
plt.fill_between(fechas, ventas, color="#ffcc00", alpha=0.6, edgecolor="#1a1a1a", linewidth=1.5)
plt.title("Volumen de ventas diarias", fontsize=14, fontweight="bold")
plt.xlabel("Fecha")
plt.ylabel("Ventas")
plt.grid(True, alpha=0.3, axis="y")
plt.tight_layout()
plt.show()

El color amarillo semitransparente mantiene el estilo del libro y resalta la forma de la serie.


Múltiples series en la misma gráfica

A menudo quieres comparar dos métricas relacionadas, como ventas y visitas web.

visitas = 1000 + np.cumsum(np.random.randn(365) * 20) + 100 * np.sin(2 * np.pi * np.arange(365) / 365.25 * 12)

fig, ax1 = plt.subplots(figsize=(12, 5))

ax1.plot(fechas, ventas, color="#1a1a1a", linewidth=2, label="Ventas")
ax1.set_ylabel("Ventas", color="#1a1a1a")
ax1.tick_params(axis="y", labelcolor="#1a1a1a")

ax2 = ax1.twinx()
ax2.plot(fechas, visitas, color="#ff8b94", linewidth=2, label="Visitas")
ax2.set_ylabel("Visitas", color="#ff8b94")
ax2.tick_params(axis="y", labelcolor="#ff8b94")

plt.title("Ventas vs visitas web", fontsize=14, fontweight="bold")
fig.tight_layout()
plt.show()

El eje Y doble es útil cuando las dos series tienen escalas muy diferentes.


Destacar picos y valles

Puedes resaltar valores extremos para llamar la atención sobre eventos especiales.

# Detectar picos: valores por encima de percentil 95
umbral_alto = np.percentile(ventas, 95)
umbral_bajo = np.percentile(ventas, 5)

plt.figure(figsize=(12, 5))
plt.plot(fechas, ventas, color="#1a1a1a", linewidth=1.5, label="Ventas")
plt.scatter(fechas[ventas > umbral_alto], ventas[ventas > umbral_alto], color="#ff8b94", s=40, zorder=5, label="Picos")
plt.scatter(fechas[ventas < umbral_bajo], ventas[ventas < umbral_bajo], color="#a8e6cf", s=40, zorder=5, label="Valles")
plt.axhline(umbral_alto, color="#ff8b94", linestyle="--", alpha=0.5)
plt.axhline(umbral_bajo, color="#a8e6cf", linestyle="--", alpha=0.5)
plt.title("Picos y valles en las ventas", fontsize=14, fontweight="bold")
plt.legend()
plt.tight_layout()
plt.show()

Este tipo de gráfica te ayuda a justificar análisis posteriores: ¿los picos coinciden con campañas de marketing? ¿los valles con festivos?


Resumen

La visualización es la herramienta más poderosa para entender una serie temporal. Con matplotlib puedes ir desde una línea simple hasta gráficas comparativas y destacados de eventos. El objetivo no es hacerla bonita, es hacer que los patrones sean imposibles de ignorar.