当前位置:首页>python>一起学Python第112天:饼图美化全攻略——让占比数据"色香味"俱全

一起学Python第112天:饼图美化全攻略——让占比数据"色香味"俱全

  • 2026-09-03 15:03:21
一起学Python第112天:饼图美化全攻略——让占比数据"色香味"俱全
📅 系列:一起学Python | 难度:⭐⭐ | 预计阅读:5分钟
🔗 上期回顾:第111天:柱状图

一、饼图:占比数据的"第一印象"

饼图(Pie Chart)是最直观的占比可视化工具。人类对"角度"和"面积"的感知非常敏感,一张好的饼图能让读者在3秒内读懂"谁是大头、谁是零头"。

适用场景:市场份额、预算分配、用户构成、成绩占比等总和为100%的数据。

⚠️ 注意:类别超过7个时,饼图会变得拥挤,建议改用柱状图或 treemap。

二、核心 API:pie() 参数全解析

matplotlib.pyplot.pie(x, explode=None, labels=None, colors=None,                       autopct=None, shadow=False, startangle=0,                       radius=1, wedgeprops=None, textprops=None)
参数
作用
示例
x
数据数组(自动计算占比)
[35, 25, 25, 15]
labels
扇形标签
['A', 'B', 'C', 'D']
colors
颜色列表
['#FF6B6B', '#4ECDC4', ...]
explode
突出显示(偏移距离)
(0, 0.1, 0, 0)
autopct
百分比格式
'%1.1f%%'
 一位小数
shadow
阴影效果
True
 / False
startangle
起始角度
90
 从12点钟方向开始
radius
饼图半径
默认 1
wedgeprops
扇形属性(边框等)
{'linewidth': 2, 'edgecolor': 'white'}
textprops
文本属性
{'fontsize': 12}

三、从入门到精通:5个实战示例

示例 1:基础饼图(入门)

import numpy as npimport matplotlib.pyplot as pltimport matplotlib.font_manager as fmimport os# ================= 1. 字体加载(解决报错的核心) =================font_path = "simhei.ttf"  # 确保你已经在当前目录上传了 simhei.ttfif not os.path.exists(font_path):    font_path = "/usr/share/fonts/truetype/wqy/wqy-zenhei.ttc"  # 备用系统字体prop = fm.FontProperties(fname=font_path)plt.rcParams['axes.unicode_minus'] = False# 数据sizes = np.array([35, 25, 25, 15])plt.figure(figsize=(8, 8))plt.pie(sizes)plt.show()
效果:一个四色饼图,但没有标签,像"裸饼"。

示例 2:添加标签和颜色——饼图"穿上衣服"

sizes = np.array([35, 25, 25, 15])labels = ['产品A', '产品B', '产品C', '产品D']colors = ["#d5695d", "#5d8ca8", "#65a479", "#a564c9"]plt.figure(figsize=(8, 8))plt.pie(sizes,         labels=labels,           # 标签        colors=colors,           # 自定义颜色        textprops={'fontproperties': prop, 'fontsize': 12})  # 中文标签plt.title('各产品销量占比', fontproperties=prop, fontsize=16)plt.show()

示例 3:突出显示 + 百分比——让重点"跳"出来

sizes = [15, 30, 45, 10]labels = ['A类', 'B类', 'C类', 'D类']colors = ['yellowgreen', 'gold', 'lightskyblue', 'lightcoral']# 突出显示第二个扇形(B类),偏移0.1explode = (0, 0.1, 0, 0)plt.figure(figsize=(8, 8))plt.pie(sizes,         explode=explode,               # 突出显示        labels=labels,         colors=colors,        autopct='%1.1f%%',             # 显示一位小数百分比        shadow=True,                   # 阴影效果        startangle=90,                 # 从12点钟方向开始        textprops={'fontproperties': prop, 'fontsize': 11})plt.title('突出显示重点类别', fontproperties=prop, fontsize=16)plt.show()
💡 explode 技巧:值越大,扇形离中心越远。多个扇形可同时突出:explode=(0.05, 0.1, 0, 0.05)

示例 4:百分比精度控制——从整数到两位小数

sizes = np.array([35, 25, 25, 15])labels = ['A', 'B', 'C', 'D']colors = ["#d5695d", "#5d8ca8", "#65a479", "#a564c9"]plt.figure(figsize=(8, 8))plt.pie(sizes,         labels=labels,        colors=colors,        explode=(0, 0.2, 0, 0),       # B类大幅突出        autopct='%.2f%%',              # 两位小数:35.00%        startangle=45,        textprops={'fontproperties': prop})plt.title('精确到小数点后两位', fontproperties=prop, fontsize=16)plt.show()
autopct 格式速查:
格式
效果
'%d%%'35%
(整数)
'%1.1f%%'35.0%
(一位小数)
'%.2f%%'35.00%
(两位小数)
'%1.0f%%'35%
(无小数,但保留占位)

示例 5:环形图(Donut Chart)——饼图的"进阶形态"

sizes = [30, 25, 20, 15, 10]labels = ['手机', '电脑', '平板', '手表', '耳机']colors = ['#FF6B6B', '#4ECDC4', '#45B7D1', '#FFA07A', '#98D8C8']plt.figure(figsize=(8, 8))# 绘制饼图,设置 wedgeprops 的 width 参数wedges, texts, autotexts = plt.pie(    sizes,     labels=labels,    colors=colors,    autopct='%1.1f%%',    startangle=90,    wedgeprops={'width': 0.4, 'edgecolor': 'white', 'linewidth': 2},    textprops={'fontproperties': prop, 'fontsize': 11})# 中心添加文字plt.text(0, 0, '2026年\n销售占比', ha='center', va='center',          fontsize=14, fontproperties=prop, color='#333')plt.title('环形图:更现代的占比展示', fontproperties=prop, fontsize=16)plt.show()

🔥 环形图优势:中间可放总标题或关键数据,视觉更聚焦,且被公认为比实心饼图更易读。

四、饼图美化黄金法则

法则
说明
起始角度startangle=90
 让最大扇形从12点方向开始,符合阅读习惯
突出重点
用 explode 把最重要的类别"拉"出来
白色边框wedgeprops={'edgecolor': 'white', 'linewidth': 2}
 让扇形分离更清晰
限制类别
最多6~7个类别,剩余合并为"其他"
百分比必加autopct
 不能少,否则读者无法精确判断
阴影慎用shadow=True
 适合PPT,报告建议扁平化更专业

五、避坑指南

坑
解决方案
饼图变成椭圆
添加 plt.axis('equal') 确保等比例
中文标签乱码
使用 FontProperties 加载字体文件
百分比重叠
减少类别数量,或改用柱状图
颜色太刺眼
使用莫兰迪色系或品牌色,避免纯红纯绿
扇形太多像"调色盘"
超过7个类别时,合并小类别为"其他"

六、参数速查卡

# 基础饼图plt.pie(sizes, labels=labels)# 标准美化饼图plt.pie(sizes, labels=labels, colors=colors, autopct='%1.1f%%',        startangle=90, shadow=False,        wedgeprops={'edgecolor': 'white', 'linewidth': 2})# 环形图plt.pie(sizes, wedgeprops={'width': 0.4, 'edgecolor': 'white'})# 确保正圆plt.axis('equal')

七、今日练习

  1. 基础题:绘制饼图展示5个水果的销量占比,添加标签和百分比

  2. 进阶题:突出显示销量最高的水果,使用阴影和自定义颜色

  3. 挑战题:将饼图改为环形图,中间显示"总销量:1000件"

八、总结

今天我们掌握了 Matplotlib 饼图的核心技能:

  • ✅ plt.pie() —— 基础饼图绘制

  • ✅ labels + colors —— 让饼图有身份、有颜值

  • ✅ explode —— 突出重点扇形

  • ✅ autopct —— 百分比显示,精确传达占比

  • ✅ startangle=90 —— 从12点方向开始,符合视觉习惯

  • ✅ wedgeprops —— 白色边框,扇形分离更清晰

  • ✅ 环形图 —— 进阶形态,中间可加标题

关键记忆:饼图看占比,标签颜色不能少,重点突出用 explode,百分比格式 autopct。

🎯 今日金句:饼图是数据的披萨——每一块的大小都在无声地宣告:谁才是餐桌上的主角。

最新文章

随机文章