Seaborn : seaborn barplot에 전설을 추가하는 방법
Dec 12 2020
seaborn
막대 플롯에 범례를 추가하려고합니다 . 나는 이미 색조를 추가하려고 시도했지만 오류가 발생 IndexingError: Unalignable boolean Series provided as indexer (index of the boolean Series and of the indexed object do not match).
하여 레이블 매개 변수를 제공하여 다른 솔루션을 시도했습니다. 다음은 코드입니다.
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")
이 결과는 잘못된 결과입니다. 바의 색상에 따라 여성 및 남성이라는 레이블이 있어야합니다. 암컷과 수컷은 서로 다른 색으로 구분되어야합니다. 난 이미 따르도록 노력 이 , 이 , 그리고 이 나를 위해 그러나 그 일 없음. 어떻게해야합니까?

답변
1 lys Dec 13 2020 at 07:06
다음 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")
3 StupidWolf Dec 13 2020 at 06:54
나는 당신이 그룹 비와 일을 지나치게 복잡하게 만들고 있다고 생각합니다. sns.countplot을 사용할 수 있습니다.
customer = pd.DataFrame({'gender':np.random.choice(["Male","Female"],100)})
sns.countplot(x='gender',hue='gender',data=customer,dodge=False)
