Seaborn : Как добавить легенду к графику Seaborn

Я пытаюсь добавить легенду к моему графику seaborn. Я уже пытался добавить оттенок, но выдает ошибку с надписью IndexingError: Unalignable boolean Series provided as indexer (index of the boolean Series and of the indexed object do not match)., поэтому я попробовал другое решение, указав параметр labels. Вот код

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

Это результат, этот результат неверен. Предполагается, что у него есть метки «Женщина» и «Мужчина» в соответствии с их цветом на панели. Самка и самец должны быть разделены разными цветами. Я уже пытался следить за этим , этим и этим, но ни один из них не работает для меня. Как я должен это делать?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
4
0
4 749
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я думаю, что вы слишком усложняете ситуацию с groupby. Вы можете использовать sns.countplot:

customer = pd.DataFrame({'gender':np.random.choice(["Male","Female"],100)})
sns.countplot(x='gender',hue='gender',data=customer,dodge=False)

Ответ принят как подходящий

Вот один лайнер, который вы можете использовать в своем существующем коде, установив параметр handles для легенды:

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

Полный сценарий:

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

Другие вопросы по теме