这里基本上,出现两个图例的话,需要调用两次
legend
。第一次调用,你需要将图例保存到一个变量中,然后保存下来。第二次调用清除之前创建的第一个的图例,之后你可以通过Axes.add_artist
函数手动将第一个图例重新添加回来。是引用
一、使用嵌套饼图对比男女生体重指数进行比例统计,分为正常、低体重、超重、肥胖(男女生体重指数参考如下)
#男生BMI分组
bins = [min(bmi_1)-1,16.4,23.2,26.3,max(bmi_1)+1]
labels = ['低体重','正常','超重','肥胖']
aa= pd.cut(bmi_1, bins, right = False, labels= labels).value_counts(ascending = False)
#获取各组名称作为饼图标签
indexs = aa._stat_axis.values.tolist()
plt.figure(figsize = (5,8))
#画大饼图
patches,l_text,p_text = plt.pie(aa,
radius = 2,
colors = ['tomato', 'lightskyblue', 'goldenrod', 'green'],
autopct = '%0.1f%%',
pctdistance = 0.85,
wedgeprops=dict(linewidth=3,width=0.8,edgecolor='w'))
plt.title('男女生体重指数对比',pad =110,fontsize = 22)
#设置比例标签字号
for t in p_text:
t.set_size(15)
#添加男生图例,并保存为"l1"
l1 = plt.legend(indexs,labels = indexs,bbox_to_anchor = (1.1,0.3,0.4,1),title ='男生指数')
#女生BMI分组
bins2 = [min(bmi_2)-1,16.4,22.7,25.2,max(bmi_2)+1]
aa2= pd.cut(bmi_2, bins2, right = False, labels= labels).value_counts(ascending = False)
#获取各组名称作为饼图标签
indexs2 = aa2._stat_axis.values.tolist()
#画小饼图
patches2,l_text2,p_text2 = plt.pie(aa2,
radius =1.2,
autopct = '%0.1f%%',
colors = ['gold', 'salmon', 'violet', 'teal'],
pctdistance = 0.7,
wedgeprops=dict(linewidth=3,width=0.7,edgecolor='w'))
l2 = plt.legend(patches2,indexs2,bbox_to_anchor = (1.38,0.3,0.4,1),title ='女生指数')
#重新显示男生图例
plt.gca().add_artist(l1)
#设置比例标签字号
for t in p_text2:
t.set_size(15)