条形图的着色图例标签



我正在尝试建立一个欧冠冠军和他们国内联赛成绩的图表。我发现按团队给每个柱状图上色的最好方法是循环遍历每个季节/年份,并为每个柱状图添加如下图。

fig,ax = plt.subplots()
fig.set_size_inches(16,8)
for s in P_df['Season']:
x = s
y = P_df.loc[P_df['Season'] == s, 'Position']
y = y.to_list()[0]
team = P_df.loc[P_df['Season'] == s, 'Team']
team = team.to_list()[0]
face = color_key[team]
edge = color2nd_key[team]
ax.bar(x,y,color=face,label=team,edgecolor =edge,linewidth =3)

当我尝试添加一个图例时,它包括所有的球队,包括重复的,所以我试着只给它提供唯一的球队(避免重复),然后循环通过图例标签,并在下面的代码中分配颜色:

ax.legend(color_key,loc = 'upper right')
leg = ax.legend(P_df['Team'].unique(),bbox_to_anchor=(1.02, 1), loc='upper left', borderaxespad=0, facecolor = 'black',edgecolor ='white')
handles, labels = ax.get_legend_handles_labels()
la = set(labels)
la = list(la)
for label in la:
for ha in ax.legend_.legendHandles:
te = label
e = color2nd_key[te]
f = color_key[te]
ha.set_edgecolor(e)
ha.set_facecolor(f)

唯一的问题是,当我这样做时,它会将我假设的第一个值的颜色分配给所有的图例标签,如下面的链接图片所示。传说

知道我做错了什么,或者是否有更好的方法来做到这一点吗?谢谢!

作为一个更新能够做到这一点,它工作:

for team1 in P_df['Team'].unique():
e = color2nd_key[team1]
f = color_key[team1]
patch = mpatches.Patch(edgecolor =e, facecolor =f, label = team1)
patches.append(patch)
leg = ax.legend(labels,handles = patches,bbox_to_anchor=(1.02, 1), loc='upper left', borderaxespad=0, facecolor = 'tan',edgecolor ='white')

最新更新