我正在移动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)
但如果我尝试移动图例,则会将其从修补程序转换为行
#move legend
ax.legend(loc=9, bbox_to_anchor=(0.2, -0.2), ncol=2)
答案 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)