Establecer la leyenda fuera de la figura en Seaborn

Salman Mehmood 15 febrero 2024
Establecer la leyenda fuera de la figura en Seaborn

Este artículo trata sobre la leyenda de una figura en Seaborn. Compartiremos varios consejos diferentes, como poner la leyenda fuera de la figura y hacer una leyenda horizontal en Seaborn.

Establecer la leyenda fuera de la figura usando el argumento bbox_to_anchor en Seaborn

Al agregar una leyenda a sus figuras de Matplotlib, la ubicación de esa leyenda es muy importante. Matplotlib intentará detectar automáticamente la mejor ubicación para su leyenda, pero también podemos moverla alrededor de la trama y, especialmente a veces, es posible que queramos mover la leyenda fuera de la figura por completo.

Como no hay forma de manejar la leyenda usando Seaborn, necesitaremos Matplotlib para resolver este problema. Veamos cómo podemos usar estas bibliotecas juntas.

Comencemos importando algunas bibliotecas y creando dos matrices para los ejes x e y. También creamos dos diagramas de líneas utilizando el método lineplot() de Seaborn.

Código:

import seaborn as sb
import numpy as np
import matplotlib.pyplot as plot

sb.set_style("whitegrid")

X1 = np.array([1, 2, 3, 4, 5])
Y1 = np.array([2, 1, 4, 6, 4])

sb.lineplot(X1, Y1, label="blue")
sb.lineplot(X1, Y1 + 2, color="orange", label="orange")

plot.legend(loc="lower right")
plot.show()

Hay un argumento llamado loc dentro de la función de leyenda. Esto puede aceptar una cadena como inferior derecha, lo que significa que le gustaría colocar la leyenda en la esquina inferior derecha.

Producción:

Seaborn Legend Exterior - Salida 1

Hay otra cosa sobre cómo podemos mover esa leyenda completamente fuera de la figura. Hay muchas maneras diferentes de hacer esto, pero le mostraremos la forma más fácil.

Para mover la leyenda al exterior, pasaremos un argumento llamado bbox_to_anchor. Este argumento acepta una tupla que va de 0 a 1 para las dimensiones x e y.

Código:

plot.legend(bbox_to_anchor=(1.05, 1), loc="upper left")

Entonces, si pasamos 1.05 y 1, eso moverá la leyenda a la esquina superior derecha. Si va a usar este enfoque bbox_to_anchor, debe usar el argumento loc para representar qué esquina de nuestra leyenda debe alinearse.

Código:

import seaborn as sb
import numpy as np
import matplotlib.pyplot as plot

sb.set_style("whitegrid")

X1 = np.array([1, 2, 3, 4, 5])
Y1 = np.array([2, 1, 4, 6, 4])

sb.lineplot(X1, Y1, label="blue")
sb.lineplot(X1, Y1 + 2, color="orange", label="orange")

plot.legend(bbox_to_anchor=(1.05, 1), loc="upper left")
plot.tight_layout()
plot.show()

Hemos pasado la superior izquierda, lo que significa que la esquina superior izquierda de la leyenda estará en los puntos 1.05 y 1.

Seaborn Legend Exterior - Salida 2

Si cambiamos la ubicación, digamos abajo a la izquierda, veremos que la esquina inferior izquierda está alineada en esa posición.

import seaborn as sb
import numpy as np
import matplotlib.pyplot as plot

sb.set_style("whitegrid")

X1 = np.array([1, 2, 3, 4, 5])
Y1 = np.array([2, 1, 4, 6, 4])

sb.lineplot(X1, Y1, label="blue")
sb.lineplot(X1, Y1 + 2, color="orange", label="orange")

plot.legend(bbox_to_anchor=(1.05, 1), loc="lower left")
plot.tight_layout()
plot.show()

Pero este enfoque no dará el resultado esperado.

Producción:

Seaborn Legend Exterior - Salida 3

Probemos otro enfoque para mover la leyenda a la esquina inferior izquierda. Solo necesitamos pasar bbox_to_anchor al negativo 0.05 y 0.

Código:

import seaborn as sb
import numpy as np
import matplotlib.pyplot as plot

sb.set_style("whitegrid")

X1 = np.array([1, 2, 3, 4, 5])
Y1 = np.array([2, 1, 4, 6, 4])

sb.lineplot(X1, Y1, label="blue")
sb.lineplot(X1, Y1 + 2, color="orange", label="orange")

plot.legend(bbox_to_anchor=(-0.05, 0), loc="lower right")
plot.tight_layout()
plot.show()

Ahora está movida y la leyenda está completamente fuera de la figura.

Producción:

Seaborn Legend Exterior - Salida 4

También podemos hacer que nuestra leyenda sea horizontal usando el argumento ncol, y este ncol representa el número de columnas. Pondremos un punto positivo a x y un punto negativo a y; nuestra ubicación será la parte superior central del cuadro delimitador de la leyenda.

Código:

import seaborn as sb
import numpy as np
import matplotlib.pyplot as plot

sb.set_style("whitegrid")

X1 = np.array([1, 2, 3, 4, 5])
Y1 = np.array([2, 1, 4, 6, 4])

sb.lineplot(X1, Y1, label="blue")
sb.lineplot(X1, Y1 + 2, color="orange", label="orange")

plot.legend(ncol=2, bbox_to_anchor=(0.5, -0.1), loc="upper center")
plot.tight_layout()
plot.show()

Producción:

Seaborn Leyenda Afuera - Salida 5

Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn

Artículo relacionado - Seaborn Legend