饼图(Pie Chart)是最直观的占比可视化工具。人类对"角度"和"面积"的感知非常敏感,一张好的饼图能让读者在3秒内读懂"谁是大头、谁是零头"。
适用场景:市场份额、预算分配、用户构成、成绩占比等总和为100%的数据。
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 | TrueFalse | |
startangle | 90 | |
radius | 1 | |
wedgeprops | {'linewidth': 2, 'edgecolor': 'white'} | |
textprops | {'fontsize': 12} |
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()

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()

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)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% |
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 |
| 突出重点 | explode 把最重要的类别"拉"出来 |
| 白色边框 | wedgeprops={'edgecolor': 'white', 'linewidth': 2} |
| 限制类别 | |
| 百分比必加 | autopct |
| 阴影慎用 | shadow=True |
plt.axis('equal') 确保等比例 | |
FontProperties 加载字体文件 | |
# 基础饼图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')
基础题:绘制饼图展示5个水果的销量占比,添加标签和百分比
进阶题:突出显示销量最高的水果,使用阴影和自定义颜色
挑战题:将饼图改为环形图,中间显示"总销量:1000件"
今天我们掌握了 Matplotlib 饼图的核心技能:
✅ plt.pie() —— 基础饼图绘制
✅ labels + colors —— 让饼图有身份、有颜值
✅ explode —— 突出重点扇形
✅ autopct —— 百分比显示,精确传达占比
✅ startangle=90 —— 从12点方向开始,符合视觉习惯
✅ wedgeprops —— 白色边框,扇形分离更清晰
✅ 环形图 —— 进阶形态,中间可加标题
关键记忆:饼图看占比,标签颜色不能少,重点突出用 explode,百分比格式 autopct。
