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
- Método 1: Usando
fig.legend()
- Método 2: Personalizando la Ubicación y Apariencia de la Leyenda
- Método 3: Manejando Múltiples Líneas por Subplot
- Conclusión
- Preguntas Frecuentes
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.