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:
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.
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:
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:
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:
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