Saltar al contenido

Cómo unificar leyendas de dos subplots en Python

Compartir es gratis...

A modo de apunte en una libreta, y con la intención de que pueda ayudar a alguien más que se encuentre con la misma duda, explico aquí cómo unificar dos leyendas de una gráfica hecha en Python, para que aparezca en un mismo espacio. La librería utilizada es la más habitual, matplotlib.



Es habitual tener que representar más de una variable en una sola gráfica, y querer usar un eje secundario. En este caso, si queremos mostrar una leyenda donde se nos muestre todo lo que hemos representado, bastaría con escribir plt.legend( ) , pero encontramos que ocurre esto.

Como ves, en la leyenda solo aparece la serie 3. Podríamos forzar que salgan las series 1 y 2, pero lo van a hacer en una nueva leyenda. Nos interesa unificar todo en una misma leyenda, y para eso vamos a borrar el plt.legend() y vamos a escribir este código antes de nuestro plt.show()

lines_labels = [ax.get_legend_handles_labels() for ax in fig.axes]
lines, labels = [sum(lol, []) for lol in zip(*lines_labels)]


fig.legend(lines, labels, loc='upper center', ncol=3)

Con esto, vamos a conseguir que la gráfica se vea así, con una única leyenda donde se ven todas las series.




Como ya habrás adivinado, en la línea fig.legend(lines, labels, loc=’upper center’, ncol=3) puedes hacer cambios para personalizar dónde y cómo quieres que se vea la leyenda. En este caso, he optado por colocarla centrada y por encima de la gráfica (upper center) y todas en una misma línea, es decir, en tres columnas (ncol=3) porque tengo 3 series de datos representados.

Y hasta aquí este «truco» para unificar leyendas en Python con matplotlib. Espero que te sea de ayuda.


Publicado enDivulgación

Sé el primero en comentar

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.