Seaborn: So fügen Sie dem Seaborn Barplot eine Legende hinzu
Ich versuche, meinem seaborn
Balkendiagramm eine Legende hinzuzufügen . Ich habe bereits versucht, einen Farbton hinzuzufügen, aber es wird ein Fehler angezeigt, der besagt, IndexingError: Unalignable boolean Series provided as indexer (index of the boolean Series and of the indexed object do not match).
dass ich eine andere Lösung ausprobiert habe, indem ich ihm den Label-Parameter gegeben habe. Hier ist der Code
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")
Dies ist das Ergebnis, dieses Ergebnis ist falsch. Es soll das Etikett "Weiblich" und "Männlich" entsprechend ihrer Farbe in der Leiste haben. Das Weibchen und das Männchen sollen mit unterschiedlichen Farben getrennt werden. Ich habe bereits versucht, diesem , diesem und jenem zu folgen , aber keines davon funktioniert für mich. Wie soll ich das machen

Antworten
Hier ist ein handles
Einzeiler, den Sie in Ihrem vorhandenen Code verwenden können, indem Sie den Parameter für die Legende festlegen:
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())]
Verwenden Sie wie folgt:
plt.legend(handles=patches, loc="upper left")

Vollständiges Skript:
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")
Ich denke, Sie machen die Sache mit der Gruppe zu kompliziert. Sie können sns.countplot verwenden:
customer = pd.DataFrame({'gender':np.random.choice(["Male","Female"],100)})
sns.countplot(x='gender',hue='gender',data=customer,dodge=False)
