Combina fig.legend con subfiguras en matplotlib.
Aviso legal: Soy consciente de que el uso de subfiguras es irrelevante en este ejemplo simple, esto último se utiliza solo para mostrar mi problema: quiero poder usar fig.legend()
con fig.subfigures1
.
Actualmente estoy descubriendo el nuevo módulo de subfiguras de matplotlib. Me he dado cuenta de que las leyendas de las figuras creadas con fig.legend()
no aparecen cuando la figura principal contiene subfiguras:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(1, 10, 10)
y1 = x
y2 = -x
fig = plt.figure(constrained_layout=True)
subfigs = fig.subfigures(nrows=2, ncols=1)
for subfig in subfigs:
axarr = subfig.subplots(1, 2)
for ax in axarr.flatten():
l1, = ax.plot(x, y1, label='linea1')
l2, = ax.plot(x, y2, label='linea2')
#
ax.legend()
# subfig.legend(handles=[l1, l2], loc='centro superior', ncol=2)
fig.legend(handles=[l1, l2], loc='centro superior', ncol=2)
plt.savefig('subfiguras_figlegend.png', dpi=200)
Observa cómo esa leyenda de la figura está ausente. Para hacer una comparación, hay que tener en cuenta que aparece cuando se utiliza solo plt.subplots
:
fig, axarr = plt.subplots(2, 2, constrained_layout=True)
for ax in axarr.flatten():
l1, = ax.plot(x, y1, label='linea1')
l2, = ax.plot(x, y2, label='linea2')
#
ax.legend()
fig.legend(handles=[l1, l2], loc='centro superior', ncol=2)
plt.savefig('subplots_figlegend.png', dpi=200)
davy.ai
Parece que al usar subfiguras en matplotlib, la leyenda de la figura creada con
fig.legend()
no aparece. Sin embargo, las leyendas creadas para cada subfigura individual usandoax.legend()
sí aparecen. Una solución alternativa es crear manejadores separados para cada leyenda de subfigura y pasarlos todos afig.legend()
como una lista. Otra opción es usar el métodosubfig.legend()
en lugar deax.legend()
para crear las leyendas de las subfiguras y luego usarfig.legend()
para crear la leyenda general de la figura.