Seaborn: Cómo agregar leyenda a la gráfica de barras de seaborn
Estoy tratando de agregar una leyenda a mi seaborn
diagrama de barras. Ya intenté agregar tono pero aparece un error que dice, IndexingError: Unalignable boolean Series provided as indexer (index of the boolean Series and of the indexed object do not match).
así que probé otra solución dándole el parámetro de etiquetas. Aqui esta el codigo
plt.figure(figsize=[15,12])
sns.barplot(x=customer['gender'].unique(),y=customer.groupby(['gender'])['gender'].count(),
data=customer,label=customer['gender'].unique())
plt.legend(loc="upper left")
Este es el resultado, este resultado es incorrecto. Se supone que tiene la etiqueta Mujer y Hombre según su color en la barra. Se supone que la hembra y el macho están separados con diferentes colores. Ya intenté seguir esto , esto y esto, pero ninguno de esos funciona para mí. ¿Cómo debería hacerlo?

Respuestas
Aquí hay una línea que puede usar en su código existente configurando el parámetro handles
para la leyenda:
patches = [matplotlib.patches.Patch(color=sns.color_palette()[i], label=t) for i,t in enumerate(t.get_text() for t in plot.get_xticklabels())]
Use así:
plt.legend(handles=patches, loc="upper left")

Guión completo:
import seaborn as sns
import matplotlib.pyplot as plt
import matplotlib
import pandas as pd
import numpy as np
import random
#generate random test data
genders = ['Male', 'Female']
sampling = random.choices(genders, k=100)
customer = pd.DataFrame({'gender': sampling})
#you can change the palette and it will still work
sns.set_palette("Accent")
plot = sns.barplot(x=customer['gender'].unique(),y=customer.groupby(['gender'])['gender'].count(),
data=customer)
patches = [matplotlib.patches.Patch(color=sns.color_palette()[i], label=t) for i,t in enumerate(t.get_text() for t in plot.get_xticklabels())]
plt.legend(handles=patches, loc="upper left")
Creo que estás complicando demasiado las cosas con el grupo. Puede usar sns.countplot:
customer = pd.DataFrame({'gender':np.random.choice(["Male","Female"],100)})
sns.countplot(x='gender',hue='gender',data=customer,dodge=False)
