Mover la leyenda de la trama de Seaborn a una posición diferente

Resuelto user124114 asked hace 9 años • 8 respuestas

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?

user124114 avatar Nov 19 '14 21:11 user124114
Aceptado

Sobre la base de la respuesta de @ user308827: puede usar legend=Falseen 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")
  • pltactúa sobre los ejes actuales. Para obtener hachas de un FacetGriduso fig.
    • g.fig.get_axes()[0].legend(loc='lower left')
Jules avatar Nov 23 '2014 00:11 Jules
  • Para seaborn >= 0.11.2uso seaborn.move_legend, que se aplica a gráficos a nivel de ejes y figuras , y acepta kwargs, comotitle
    • Consulte matplotlib.axes.Axes.legendy Cómo eliminar la leyenda del gráfico para conocer los parámetros y su uso.
  • La pregunta original preguntaba sobre sns.factorplot, que ahora se llama seaborn.catplot, una trama a nivel de figura.
  • Para g = sns.jointploto g = sns.JointGrid, la leyenda está en g.ax_joint, no g.
    • 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_legendes 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.
  • 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.objectinterfaz, que debutó en seaborn 0.12.0.
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()

ingrese la descripción de la imagen aquí

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()

ingrese la descripción de la imagen aquí

Trenton McKinney avatar Aug 19 '2021 14:08 Trenton McKinney