如何根据贡献值在pyplot饼图中显示已过滤的图例标签?

时间:2017-10-11 15:52:33

标签: python matplotlib legend pie-chart

我想绘制一个饼图,显示超过1%的贡献及其相应的图例标签。

我已设法在饼图上显示我想要的百分比值(请参阅下面的脚本),但不显示图例标签。在以下示例中,我想显示图例标签ABCD,但不显示EF。

我尝试了几种方法,但只能显示完整的图例,或者显示具有无与伦比(错误)颜色的已过滤图例。

我该怎么做?有人可以帮忙吗?感谢。

sizes = pd.DataFrame([80,10,5,4,0.1,0.9],index=list("ABCDEF"))

fig1, ax2 = plt.subplots()

def autopct_more_than_1(pct):
    return ('%1.f%%' % pct) if pct > 1 else ''

ax2.pie(sizes.values, autopct=autopct_more_than_1)
ax2.axis('equal') 

plt.legend(sizes.index, loc="best", bbox_to_anchor=(1,1))

plt.show()

1 个答案:

答案 0 :(得分:0)

您可以遍历数据框值(如果尚未标准化,则可能已标准化),并且仅为大于1的数据框处理和标签。

import matplotlib.pyplot as plt
import pandas as pd

sizes = pd.DataFrame([80,10,5,4,0.1,0.9],index=list("ABCDEF"))

fig1, ax = plt.subplots()

def autopct_more_than_1(pct):
    return ('%1.f%%' % pct) if pct > 1 else ''

p,t,a = ax.pie(sizes.values, autopct=autopct_more_than_1)
ax.axis('equal') 

# normalize dataframe (not actually needed here, but for general case)
normsizes = sizes/sizes.sum()*100
# create handles and labels for legend, take only those where value is > 1
h,l = zip(*[(h,lab) for h,lab,i in zip(p,sizes.index.values,normsizes.values) if i > 1])

ax.legend(h, l,loc="best", bbox_to_anchor=(1,1))

plt.show()

enter image description here