44 · Personalización: etiquetas, leyendas, estilos
Un gráfico correcto y un gráfico legible no son lo mismo. Títulos, etiquetas de ejes, leyendas, cuadrículas, elección de colores y estilos consistentes son lo que separa los bocetos exploratorios de las figuras que pondrías en un paper o una presentación.
Cada elemento de una figura matplotlib es un objeto **Artist** con propiedades configurables. Etiquetas de ejes (`ax.set_xlabel`), título (`ax.set_title`), marcas de ticks (`ax.set_xticks`), líneas de cuadrícula (`ax.grid`) y leyenda (`ax.legend`) son todas capas independientes que añades a un objeto `Axes`. La interfaz OO hace explícita esta estratificación: mantienes una referencia a `ax` y llamas métodos sobre él en cualquier orden que quieras antes de guardar.
Sin esto:
Una curva de pérdida sin etiquetas es casi inútil para la comunicación — no sabes qué línea es entrenamiento vs. validación, qué representan los ejes, o en qué escala estás. Cada figura que compartas con un colaborador o gerente necesita como mínimo: un título, ejes etiquetados y una leyenda si hay múltiples líneas.
Una vez que puedes dibujar un gráfico, la siguiente habilidad es hacerlo legible. Esta lección cubre el kit completo de personalización para la interfaz OO de matplotlib:
- Títulos y etiquetas de ejes —
ax.set_title('...'),ax.set_xlabel('...'),ax.set_ylabel('...') - Leyendas — añade
label='...'a cada llamada.plot(), luego llamaax.legend(loc='upper right')para renderizarla - Límites de ejes —
ax.set_xlim(lo, hi),ax.set_ylim(lo, hi)para controlar el rango visible - Ticks —
ax.set_xticks([...]),ax.set_xticklabels([...])para posiciones y etiquetas personalizadas - Cuadrícula —
ax.grid(True, alpha=0.3)añade una cuadrícula de referencia sutil sin dominar los datos - Colores y estilos de línea —
color=,linestyle='--',linewidth=,marker='o' - Estilos —
plt.style.use('ggplot')aplica un tema global antes de dibujar tight_layout()— corrige el solapamiento de etiquetas automáticamente; llámalo antes de cadasavefig
El caso de uso canónico de ML para todo esto es la curva de pérdida entrenamiento vs. validación — el gráfico diagnóstico más importante en deep learning.
Python (in browser)
Un argumento `label=` en cada llamada `.plot()` registra esa línea con la leyenda. `ax.legend()` renderiza todas las etiquetas registradas. Sin `label=`, `ax.legend()` produce una caja de leyenda vacía — un error común.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Python (in browser)
`axes[fila, col]` indexa en una grilla de subplots 2D. `fig.suptitle()` añade un título a nivel de figura por encima de todos los subplots. `ax.fill_between(x, y1, y2)` rellena el área entre dos curvas — excelente para mostrar bandas de confianza o brechas. `ax.axhline(0)` dibuja una línea de referencia horizontal.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Los estilos deben establecerse antes de dibujar. `seaborn-v0_8` es el nombre actual para el antiguo string de estilo `seaborn` — el cambio de nombre ocurrió en matplotlib 3.6 cuando seaborn actualizó su propio tema predeterminado.
Graficas dos líneas con `ax.plot(x, y1)` y `ax.plot(x, y2)` — sin argumento `label=` en ninguna. Luego llamas `ax.legend()`. ¿Qué pasa?
- `ax.set_title`, `ax.set_xlabel`, `ax.set_ylabel` añaden texto a la figura — inclúyelos siempre antes de compartir.
- Establece `label='...'` en cada artista graficado que quieras en la leyenda, luego llama `ax.legend()`.
- `ax.grid(True, alpha=0.3)` añade una cuadrícula de referencia sutil. `ax.set_xlim` / `ax.set_ylim` controlan el rango visible.
- Llama `fig.tight_layout()` antes de `fig.savefig()` para corregir automáticamente el solapamiento de etiquetas en grillas de subplots.
Las curvas de pérdida entrenamiento vs. validación son el diagnóstico primario del sobreajuste — no puedes interpretarlas sin ejes etiquetados y una leyenda. Las grillas de subplots de múltiples métricas (pérdida, precisión, tasa de aprendizaje) son estándar en los dashboards de experimentos. Las figuras bien formateadas con `dpi=300` son las que se envían con los papers.
Si lo quitas: Sin habilidades de personalización, cada gráfico que compartes es un boceto sin etiquetas — tus colaboradores no pueden distinguir qué línea es entrenamiento vs. validación, qué miden los ejes, o en qué escala estás. Incluso para ti mismo, las etiquetas de ejes y una leyenda son la diferencia entre un gráfico que puedes interpretar en seis meses y uno que no puedes.