matplotlib 来自数值计数的饼图(显示百分比)[重复]

ruoxqz4g  于 2023-04-06  发布在  其他
关注(0)|答案(2)|浏览(175)

此问题已在此处有答案

Show both value and percentage on a pie chart [duplicate](2个答案)
How do I use matplotlib autopct?(7个回答)
7个月前关闭。
我有一个类似下面的数据框-

df = pd.DataFrame([
    ['Fully Paid',1,1],
    ['Fully Paid',1,1],
    ['Fully Paid',1,0],
    ['Defaulted',1,0],
    ['Defaulted',1,0]
], columns=['LoanStatus', 'B', 'C'])

我期待绘制在一个饼图显示60%的贷款状态是全额支付,而40%是违约这一点。我能够做到这一点在一个计数图,但无法做到这一点在饼图-

COUNT PLOT: 

sns.countplot(x="LoanStatus",data=df)

预期:
一个饼图显示有多少值有两个贷款状态沿着百分比。

zd287kbt

zd287kbt1#

将自定义函数与Series.value_counts一起用于相同饼图中计数的百分比:

#https://stackoverflow.com/a/71515035/2901002
def autopct_format(values):
        def my_format(pct):
            total = sum(values)
            val = int(round(pct*total/100.0))
            return '{:.1f}%\n({v:d})'.format(pct, v=val)
        return my_format

s = df['LoanStatus'].value_counts()
plt.pie(s,labels = s.index, autopct=autopct_format(s))
#pandas only alternative
#s.plot.pie(autopct=autopct_format(s))

ioekq8ef

ioekq8ef2#

您可以这样做以获得饼图。如果您想以不同的方式显示值和百分比,请调整fmt

#df.LoanStatus.
df = pd.DataFrame([
    ['Fully Paid',1,1],
    ['Fully Paid',1,1],
    ['Fully Paid',1,0],
    ['Defaulted',1,0],
    ['Defaulted',1,0]
], columns=['LoanStatus', 'B', 'C'])

total = df['LoanStatus'].value_counts().values.sum()

def fmt(x):
    return '{:.1f}%\n{:.0f}'.format(x, total*x/100)

plt.pie(df['LoanStatus'].value_counts().values, labels=df['LoanStatus'].value_counts().index, autopct=fmt)

附加信息-def fmt()是一个函数,将在绘图时为每个条目调用。值x将作为自动计算百分比的输入(3/5100=60和2/5100=40)。还有更多使用此here的示例。计算Total以获得default +FullyPaid的总和(5).对于每个标签,返回值基本上是在字符串中,该字符串是输入值x,具有1个小数位,并且在其后具有百分比符号({:.1f}%),然后\n,它是一个换行符,后跟计算字段(total*x/100),格式为没有小数的整数({:.0f})。如果您需要有关字符串格式选项的更多信息,您可以找到它here。希望这对您有帮助。

相关问题