Data Visualization

Leyendas de Matplotlib: Creando una leyenda unificada para todos los subplots

Spread the love

Matplotlib es una potente biblioteca de Python para crear visualizaciones. Sin embargo, cuando se trabaja con múltiples subplots, la gestión de las leyendas puede volverse compleja. Este artículo proporciona métodos eficientes para crear una sola leyenda unificada en todos sus subplots.

Tabla de Contenidos

Entendiendo Subplots en Matplotlib

Los subplots organizan múltiples gráficos dentro de una sola figura. En Matplotlib, se crean usando matplotlib.pyplot.subplots(), que devuelve un objeto figura y un array de objetos axes (uno por subplot).

import matplotlib.pyplot as plt

fig, axes = plt.subplots(2, 2)  # Cuadrícula 2x2 de subplots

# Trazar datos en cada subplot
axes[0, 0].plot([1, 2, 3], [4, 5, 6], label='Línea 1')
axes[0, 1].plot([1, 2, 3], [7, 8, 9], label='Línea 2')
axes[1, 0].plot([1, 2, 3], [10, 11, 12], label='Línea 1')
axes[1, 1].plot([1, 2, 3], [13, 14, 15], label='Línea 2')

plt.show()

Esto crea una cuadrícula 2×2, cada una con su propia leyenda. Consolidaremos estas en una sola leyenda.

Método 1: Usando fig.legend()

El enfoque más simple usa el método legend() del objeto figura. Esto requiere recopilar todos los manejadores y etiquetas de la leyenda.

import matplotlib.pyplot as plt

fig, axes = plt.subplots(2, 2)

lines1, = axes[0, 0].plot([1, 2, 3], [4, 5, 6], label='Línea 1')
lines2, = axes[0, 1].plot([1, 2, 3], [7, 8, 9], label='Línea 2')
lines3, = axes[1, 0].plot([1, 2, 3], [10, 11, 12], label='Línea 1')
lines4, = axes[1, 1].plot([1, 2, 3], [13, 14, 15], label='Línea 2')

# Recolectar manejadores y etiquetas únicos
handles = [lines1, lines2] 
labels = [h.get_label() for h in handles]

fig.legend(handles, labels, loc='upper right')

plt.show()

Nota: Solo usamos manejadores únicos para evitar duplicados en la leyenda. loc especifica la posición de la leyenda.

Método 2: Personalizando la Ubicación y Apariencia de la Leyenda

Puede personalizar la ubicación, borde, tamaño de fuente y más de la leyenda.

import matplotlib.pyplot as plt

# ... (código de trazado del Método 1) ...

fig.legend(handles, labels, loc='lower center', bbox_to_anchor=(0.5, -0.1), ncol=2, frameon=True, fontsize=12)

plt.show()

Aquí, hemos posicionado la leyenda en el centro inferior, ajustado la posición vertical con bbox_to_anchor, usado dos columnas (ncol=2), añadido un borde (frameon=True) y aumentado el tamaño de la fuente.

Método 3: Manejando Múltiples Líneas por Subplot

Para múltiples líneas dentro de un subplot, recopile todos los manejadores y etiquetas relevantes.

import matplotlib.pyplot as plt

fig, ax = plt.subplots()

line1, = ax.plot([1, 2, 3], [4, 5, 6], label='Línea 1')
line2, = ax.plot([1, 2, 3], [7, 8, 9], label='Línea 2')
line3, = ax.plot([1, 2, 3], [10, 11, 12], label='Línea 3')

fig.legend([line1, line2, line3], [line1.get_label(), line2.get_label(), line3.get_label()], loc='best')
plt.show()

Conclusión

Crear una sola leyenda para todos los subplots mejora la claridad y la legibilidad de sus visualizaciones de Matplotlib. Los métodos que se muestran arriba, usando fig.legend() y la gestión adecuada de manejadores/etiquetas, ofrecen control sobre la ubicación y la apariencia de la leyenda.

Preguntas Frecuentes

  • P: ¿Qué pasa si tengo diferentes estilos de línea? R: La leyenda reflejará automáticamente estas diferencias.
  • P: ¿Puedo usar diferentes colores para la misma etiqueta? R: Sí, pero la leyenda solo mostrará un color por etiqueta. Use etiquetas distintas para diferenciar.
  • P: Mi leyenda se superpone con los gráficos. R: Ajuste bbox_to_anchor, loc, el tamaño de la fuente o el tamaño de la figura.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *