es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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)

imagen de descripción entrante

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)

imagen de descripción entrante

Tags:  , ,

Answer

  1. Avatar for 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 usando ax.legend() sí aparecen. Una solución alternativa es crear manejadores separados para cada leyenda de subfigura y pasarlos todos a fig.legend() como una lista. Otra opción es usar el método subfig.legend() en lugar de ax.legend() para crear las leyendas de las subfiguras y luego usar fig.legend() para crear la leyenda general de la figura.

Comments are closed.