Python matplotlib画饼图:带百分比标签的占比图
用Python matplotlib画饼图,解决中文乱码、百分比标签显示、分离突出某一项、环形图等常见需求,附完整可运行代码。
场景痛点
分析预算构成、客户来源、产品销售占比时,饼图是最直观的选择。Excel插饼图要手动拖数据标签、调分离、选配色,每次数据变了都得重新设置。用matplotlib画饼图,百分比、分离项、颜色、图例全部参数控制,脚本跑一次直接出图,重复分析省心很多。
用到的库
pip install matplotlib pandas
完整代码
# 导入绘图库
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
# 解决中文乱码
matplotlib.rcParams["font.sans-serif"] = ["SimHei", "Microsoft YaHei", "Arial Unicode MS"]
matplotlib.rcParams["axes.unicode_minus"] = False
def draw_pie_chart():
# 年度各项支出占比数据
labels = ["人力成本", "原材料", "房租水电", "营销推广", "其他"]
sizes = [42, 25, 12, 15, 6]
# 把"营销推广"这一块分离出来突出显示
explode = (0, 0, 0, 0.08, 0)
colors = ["#4C72B0", "#55A868", "#C44E52", "#8172B2", "#CCB974"]
plt.figure(figsize=(8, 8))
# autopct 显示百分比,pctdistance 控制百分比文字离中心的距离
plt.pie(
sizes,
explode=explode,
labels=labels,
colors=colors,
autopct="%1.1f%%",
pctdistance=0.75,
startangle=90,
textprops={"fontsize": 12},
)
# 保证饼图是正圆
plt.axis("equal")
plt.title("年度支出构成占比", fontsize=16)
plt.tight_layout()
plt.savefig("pie_chart.png", dpi=150)
plt.close()
print("饼图已保存为 pie_chart.png")
if __name__ == "__main__":
draw_pie_chart()
代码讲解
plt.pie()接收数值列表自动计算各块占比,labels是每块的名称。explode数组对应每块向外分离的距离,这里只把"营销推广"分离0.08,用于重点标注。autopct="%1.1f%%"自动在每块上标注百分比,保留一位小数;pctdistance=0.75控制百分比文字在半径75%的位置。startangle=90让第一块从正上方开始排列,视觉更整齐。plt.axis("equal")强制x/y轴等比例,否则饼图会被拉成椭圆。- 想做环形图,加一个
wedgeprops={"width": 0.4}参数即可。
运行结果
当前目录生成 pie_chart.png,图中是一个正圆饼图,五块支出占比分别标注百分比,"营销推广"那块轻微向外分离,标题和中文标签正常显示。
注意事项
- 饼图适合展示占比,分类超过6块就会显得拥挤,超过8块建议改用柱状图。
- 百分比标签如果和标签文字重叠,可以调
pctdistance或把labels留空改用图例。 - 数据必须是正数,负数或0会导致绘制异常。

更新时间:2026-09-14 20:30:09
上一篇:Python matplotlib保存高清图片:dpi与矢量图设置