我正在尝试向我的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")这就是结果,这个结果是错误的。它应该根据酒吧里的颜色来标注男女。雌雄应该用不同的颜色分开。我已经尝试过关注this、this和this,但这些都不适合我。我怎么发动汽车呢?

发布于 2020-12-13 15:06:01
通过为图例设置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") 发布于 2020-12-13 14:54:15
我认为你把groupby的事情复杂化了。您可以使用sns.countplot:
customer = pd.DataFrame({'gender':np.random.choice(["Male","Female"],100)})
sns.countplot(x='gender',hue='gender',data=customer,dodge=False)

https://stackoverflow.com/questions/65272126
复制相似问题