移动Pandas Legend会导致标签从修补程序更改为行

时间:2017-01-17 14:10:27

标签: python pandas legend

我正在移动Pandas传奇,但试图将其作为补丁。当我尝试调整参数时,它会换成线 - 是否有一个设置我缺少阻止这种情况发生,或者我是不是偶然重置了传奇或其他东西?我做错了什么?

代码有点复杂,所以我把有用的东西放进去。不要担心格式错误,我只是跳过了大量的格式化行,以便更容易理解。

简化代码:

my_colors = list(['goldenrod', 'royalblue', 'darkviolet', 'firebrick'])

#set up subplots
fig_heatprop, axes_heatprop = plt.subplots(nrows=2, ncols=1, sharex=True, gridspec_kw = {'height_ratios':[8, 1]})

#make totales percentages
df_touse_perc = df_touse.divide(df_touse.sum(axis=1), axis=0).multiply(100)

ax = df_touse_perc.plot(kind='area', stacked=True, color=my_colors, ax=axes_heatprop[0]) #.legend(bbox_to_anchor=(0.2, -0.3), ncol=2)

这样做: enter image description here

但如果我尝试移动图例,则会将其从修补程序转换为行

#move legend
ax.legend(loc=9, bbox_to_anchor=(0.2, -0.2), ncol=2)

enter image description here

1 个答案:

答案 0 :(得分:1)

首先通过在主代码块的最后一行将属性legend设置为False来删除默认图例

ax = df_touse_perc.plot(kind='area', 
                        stacked=True, 
                        color=my_colors, 
                        ax=axes_heatprop[0],
                        legend=False) 

对于补丁,您可以为每种颜色创建一个补丁并列出它们,最后您可以使用您提到的行设置图例,同时将handles属性设置为创建的补丁列表

import matplotlib.patches as mpatches
patch =[]
for c,l in zip(my_colors,df_touse_perc.columns.tolist()):
     patch.append(mpatches.Patch(color=c, label=l))

ax.legend(handles=patch,loc=9, bbox_to_anchor=(0.2, -0.2), ncol=2)