Mueva la leyenda de la trama nacida en el mar a una posición diferente

4 minutos de lectura

Mueva la leyenda de la trama nacida en el mar
usuario124114

Estoy usando factorplot(kind="bar") con marino.

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 parte superior izquierda en lugar del centro a la derecha?

  • Para seaborn >= 0.11.2 usar .move_legend como se muestra en esta respuesta

    –Trenton McKinney

    26 oct.


Mueva la leyenda de la trama nacida en el mar
Julio

Sobre la base de la respuesta de @ user308827: puede usar legend=False en factorplot y especifique 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 de corriente. Para obtener ejes de un FacetGrid usa la fig.
    • g.fig.get_axes()[0].legend(loc="lower left")

Echa un vistazo a los documentos aquí: https://matplotlib.org/users/legend_guide.html#ubicación-de-la-leyenda

agregar esto simplemente funcionó para sacar la leyenda de la trama:

plt.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.)

1643721907 947 Mueva la leyenda de la trama nacida en el mar
usuario308827

Modificando el ejemplo aquí:

Puedes usar legend_out = False

import seaborn as sns
sns.set(style="whitegrid")

titanic = sns.load_dataset("titanic")

g = sns.factorplot("class", "survived", "sex",
                    data=titanic, kind="bar",
                    size=6, palette="muted",
                   legend_out=False)
g.despine(left=True)
g.set_ylabels("survival probability")

ingrese la descripción de la imagen aquí

Así es como pude mover la leyenda a un lugar particular dentro de la trama y cambiar el aspecto y el tamaño de la trama:

import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
matplotlib.style.use('ggplot')
import seaborn as sns
sns.set(style="ticks")

figure_name="rater_violinplot.png"
figure_output_path = output_path + figure_name

viol_plot = sns.factorplot(x="Rater", 
                       y="Confidence", 
                       hue="Event Type", 
                       data=combo_df, 
                       palette="colorblind",
                       kind='violin',
                       size = 10,
                       aspect = 1.5,
                       legend=False)

viol_plot.ax.legend(loc=2)
viol_plot.fig.savefig(figure_output_path)  

La ubicación de la leyenda cambió

Esto me funcionó para cambiar el tamaño y el aspecto de la trama, así como para mover la leyenda fuera del área de la trama.

import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
matplotlib.style.use('ggplot')
import seaborn as sns
sns.set(style="ticks")


figure_name="rater_violinplot.png"
figure_output_path = output_path + figure_name

viol_plot = sns.factorplot(x="Rater", 
                       y="Confidence", 
                       hue="Event Type", 
                       data=combo_df, 
                       palette="colorblind",
                       kind='violin',
                       size = 10,
                       aspect = 1.5,
                       legend_out=True)

viol_plot.fig.savefig(figure_output_path)  

trama de violín con tamaño, aspecto y leyenda cambiados ubicados afuera

Me di cuenta de esto a partir de la respuesta de mwaskom aquí y la respuesta de Fernando Hernández aquí.

1643721908 475 Mueva la leyenda de la trama nacida en el mar
trenton mckinney

  • Para seaborn >= 0.11.2 usar seaborn.move_legend, que se aplica a gráficos de nivel de ejes y figuras, y acepta kwargs, me gusta title
  • La pregunta original sobre sns.factorplot, que ha sido renombrado como seaborn.catplot, una gráfica de nivel de figura.
  • Probado en python 3.8.11, pandas 1.3.2, matplotlib 3.4.3, seaborn 0.11.2
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í

1643721909 367 Mueva la leyenda de la trama nacida en el mar
Xin Niu

parece que puedes llamar directamente:

g = sns.factorplot("class", "survived", "sex",
                data=titanic, kind="bar",
                size=6, palette="muted",
               legend_out=False)

g._legend.set_bbox_to_anchor((.7, 1.1))

1643721909 234 Mueva la leyenda de la trama nacida en el mar
jacobe2169

Si desea personalizar su leyenda, simplemente use el add_legend método. Toma los mismos parámetros que matplotlib plt.legend.

import seaborn as sns
sns.set(style="whitegrid")

titanic = sns.load_dataset("titanic")

g = sns.factorplot("class", "survived", "sex",
                    data=titanic, kind="bar",
                    size=6, palette="muted",
                   legend_out=False)
g.despine(left=True)
g.set_ylabels("survival probability")
g.add_legend(bbox_to_anchor=(1.05, 0), loc=2, borderaxespad=0.)

  • parece que esto crea una nueva leyenda. En mi código, tengo otras líneas para ajustar la leyenda (título, tamaño y transparencia…). Si llamo a esto para ajustar la posición, las siguientes líneas no funcionan entonces…

    – Xin Niu

    10 sep.

.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad