我的知识记录

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会导致绘制异常。

Python matplotlib画饼图:带百分比标签的占比图

标签:

更新时间:2026-09-14 20:30:09

上一篇:Python matplotlib保存高清图片:dpi与矢量图设置

下一篇:Python matplotlib画折线图:从零绘制带标记的趋势曲线