Skip to content

Anotaciones y texto en Matplotlib: resalta insights con claridad

Updated on

Picos sin marcar o barras sin etiqueta obligan al lector a adivinar. Si el texto se superpone o queda lejos de los datos, la historia se pierde. Anotaciones claras lo resuelven: etiquetas cortas, flechas bien colocadas y fuentes coherentes que guían la atención sin añadir ruido.

Elige la herramienta de texto adecuada

TareaHerramientaPor qué
Marcar un punto con flechaannotateTexto y flecha en una sola llamada
Añadir texto libre en coords del ejetextTítulos, notas en paneles
Etiquetar barras automáticamentebar_labelAncla las etiquetas a las barras
Mantener etiquetas dentro del ejeclip_on=True, offsetsEvita que el texto se salga del plot
Envolver/formatear textotextwrap.fill, f-stringsMantiene etiquetas cortas y legibles

Anota picos con flechas

import matplotlib.pyplot as plt
import numpy as np
 
x = np.linspace(0, 10, 300)
y = np.sin(x) * np.exp(-x / 5)
 
fig, ax = plt.subplots(figsize=(7, 4))
ax.plot(x, y, color="tab:blue")
 
peak_idx = np.argmax(y)
peak_x, peak_y = x[peak_idx], y[peak_idx]
 
ax.annotate(
    "Señal pico",
    xy=(peak_x, peak_y),
    xytext=(peak_x + 1.2, peak_y + 0.2),
    arrowprops=dict(arrowstyle="->", color="tab:red", lw=1.5),
    bbox=dict(boxstyle="round,pad=0.3", fc="white", ec="tab:red", alpha=0.9),
    fontsize=10,
    color="tab:red",
)
 
ax.set_xlabel("Tiempo (s)")
ax.set_ylabel("Amplitud")
ax.grid(True, linestyle="--", alpha=0.3)
plt.tight_layout()
plt.show()

Consejos:

  • Desplaza el texto (xytext) para que la flecha quede corta y legible.
  • Usa un fondo claro (bbox) cuando el gráfico esté cargado.
  • Frases breves (2–4 palabras) evitan tapar datos.

Etiqueta barras sin solaparlas

import matplotlib.pyplot as plt
 
items = ["A", "B", "C", "D"]
values = [28, 35, 30, 22]
 
fig, ax = plt.subplots(figsize=(6, 4))
bars = ax.bar(items, values, color="tab:purple", alpha=0.9)
 
ax.bar_label(bars, labels=[f"{v}k" for v in values], padding=3)
ax.set_ylabel("Unidades vendidas")
ax.set_ylim(0, 40)
 
plt.tight_layout()
plt.show()

Consejos:

  • padding controla la distancia; usa negativo para etiquetas dentro del bar.
  • En barras apiladas, label_type="center" coloca el texto en el centro de cada pila.
  • Con valores pequeños, cambia el color del texto a blanco y coloca la etiqueta dentro.

Notas inline y colocación segura

ax.text(
    0.02, 0.95, "Experimento 3\nn=120",
    transform=ax.transAxes,
    ha="left", va="top",
    fontsize=9,
    bbox=dict(boxstyle="round", fc="white", ec="0.7", alpha=0.8)
)

Guías:

  • Con transform=ax.transAxes, las posiciones (0–1) se mantienen al redimensionar.
  • Usa clip_on=True si el texto debe quedarse dentro del plot.
  • Alinea con ha/va y añade saltos de línea cortos para evitar choques con los bordes.

Checklist de solución

  • ¿Etiquetas montadas? Reduce fuente, ajusta padding o gira ligeramente el texto.
  • ¿Flecha oculta? Sube el zorder o dibuja la anotación después de áreas rellenas.
  • ¿Texto fuera del gráfico? Activa constrained_layout=True o recorta con textwrap.fill.