Mover la leyenda de la trama de Seaborn a una posición diferente
Lo estoy usando factorplot(kind="bar")
con seaborn.
La trama está bien excepto que la leyenda está fuera de lugar: demasiado a la derecha, el texto sale del área sombreada de la trama.
¿Cómo hago para que seaborn coloque la leyenda en otro lugar, como en la esquina superior izquierda en lugar de en el centro derecha?
Aceptado
Sobre la base de la respuesta de @ user308827: puede usar legend=False
en factorplot y especificar la leyenda a través de matplotlib:
import seaborn as sns
import matplotlib.pyplot as plt
sns.set(style="whitegrid")
titanic = sns.load_dataset("titanic")
g = sns.factorplot("class", "survived", "sex",
data=titanic, kind="bar",
size=6, palette="muted",
legend=False)
g.despine(left=True)
plt.legend(loc='upper left')
g.set_ylabels("survival probability")
plt
actúa sobre los ejes actuales. Para obtener hachas de unFacetGrid
uso fig.g.fig.get_axes()[0].legend(loc='lower left')
- Para
seaborn >= 0.11.2
usoseaborn.move_legend
, que se aplica a gráficos a nivel de ejes y figuras , y aceptakwargs
, comotitle
- Consulte
matplotlib.axes.Axes.legend
y Cómo eliminar la leyenda del gráfico para conocer los parámetros y su uso.
- Consulte
- La pregunta original preguntaba sobre
sns.factorplot
, que ahora se llamaseaborn.catplot
, una trama a nivel de figura. - Para
g = sns.jointplot
og = sns.JointGrid
, la leyenda está eng.ax_joint
, nog
.sns.move_legend(g.ax_joint)
- Consulte Cómo mover o eliminar la leyenda de un JointGrid o un gráfico conjunto de seaborn .
.move_legend
es para mover la leyenda, no cambiar el título de la leyenda ni las etiquetas. Esto debe hacerse limpiando los datos.- En
pandas
, hay varias formas de cambiar los nombres de las columnas y los valores de cadena en una columna, como.rename
, y.map
.
- En
- Probado en
python 3.10
,pandas 1.5.0
,matplotlib 3.5.2
,seaborn 0.12.0
- Consulte ¿Cómo puedo personalizar la leyenda con objetos de Seaborn 0.12? para reubicar leyendas usando la nueva
seaborn.object
interfaz, que debutó enseaborn 0.12.0
.
- Consulte ¿Cómo puedo personalizar la leyenda con objetos de Seaborn 0.12? para reubicar leyendas usando la nueva
import matplotlib.pyplot as plt
import seaborn as sns
# load the data
penguins = sns.load_dataset('penguins', cache=False)
Gráfico de nivel de figura
g = sns.displot(penguins, x="bill_length_mm", hue="species", col="island", col_wrap=2, height=3)
sns.move_legend(g, "upper left", bbox_to_anchor=(.55, .45), title='Species')
plt.show()
Gráfico de nivel de ejes
ax = sns.histplot(penguins, x="bill_length_mm", hue="species")
sns.move_legend(ax, "lower center", bbox_to_anchor=(.5, 1), ncol=3, title=None, frameon=False)
plt.show()