You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Matplotlib饼图中显示带百分号的精确百分比数值

解决饼图显示原始百分比数值带百分号的问题

你的核心问题在于:plt.pie() 默认的 autopct 格式字符串是基于饼块占总数据的比例来计算的,而不是直接使用你DataFrame里的原始数值。因为你的数据总和是240(100+100+40),所以默认会把每个数值除以240再转成百分比,这显然不是你想要的效果。

要直接显示原始的“Percentage Answers”列数值并带上百分号,你需要用自定义函数替代格式字符串作为autopct的参数:

修改后的完整代码

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

# 初始化数据
data = [['Basics 1', 100.0], ['Basics 2', 100.0], ['Basics 3', 40.0]]
df = pd.DataFrame(data, columns=['Course', 'Percentage Answers'])

# 自定义autopct函数:接收占比pct和所有原始数值,返回格式化后的字符串
def autopct_format(pct, allvals):
    # 通过占比匹配对应的原始数值
    idx = np.argmin(np.abs(allvals / allvals.sum() - pct/100))
    val = allvals[idx]
    # 格式化为整数加百分号
    return f'{int(val)}%'

# 绘制饼图,传递原始数值给自定义函数
my_labels = df['Course'].tolist()
plt.pie(df["Percentage Answers"], 
        labels=my_labels, 
        autopct=lambda pct: autopct_format(pct, df["Percentage Answers"].values),
        pctdistance=0.8)  # 调整百分比文本和中心的距离,避免和标签重叠

plt.title("Percentage of Teacher's Feedback Participation")
plt.axis('equal')
plt.show()

关键说明

  • 自定义函数autopct_format通过饼块占比反推对应的原始数值,再格式化为你需要的整数%形式(比如100%、40%)。
  • 用lambda函数把原始数值数组传递给自定义autopct函数——因为plt.pie()默认只给autopct传递占比参数。
  • pctdistance参数可以调整百分比文本的位置,数值越大离中心越远,你可以根据图表情况自行调整。

如果需要保留小数(比如显示50.5%),只需把返回语句改成return f'{val}%'即可。

内容的提问来源于stack exchange,提问作者Kathia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 12:05:19