《超简单:用 Python 让 Excel 飞起来》读书笔记:第7章 案例01 举一反三 在 Python 中制作饼图

📅 2026/7/4 20:07:56
《超简单:用 Python 让 Excel 飞起来》读书笔记:第7章 案例01 举一反三 在 Python 中制作饼图
个人主页杨利杰YJlio❄️个人专栏《Sysinternals实战教程》 《Windows PowerShell 实战》 《WINDOWS教程》 《IOS教程》《微信助手》 《锤子助手》 《Python》 《Kali Linux》《那些年未解决的Windows疑难杂症》让复杂的事情更简单让重复的工作自动化《超简单用 Python 让 Excel 飞起来》读书笔记第7章 案例01 举一反三 在 Python 中制作饼图1. 第7章 案例01 举一反三在 Python 中制作饼图2. 为什么要学饼图一眼看懂占比结构3. 最小可用一段代码画出第一张饼图4. 让饼图可读显示百分比 保持圆形5. 突出重点explode shadow 让关键项更明显6. 真实工作中的可交付饼图TopN 其他7. 封装函数把饼图能力沉淀成脚本模板8. 常见问题与踩坑提醒9. 我的总结提升11. 发布版补充我建议这样使用这篇笔记1. 第7章 案例01 举一反三在 Python 中制作饼图V4修正版进度标记本篇为 07月02日 第1篇承接 06月07日第2篇“2.7.2 自定义函数”之后继续更新。读书笔记定位本文是我阅读《超简单用 Python 让 Excel 飞起来》时整理的学习笔记重点不是照搬原书而是把本节内容重新整理成更适合博客阅读、实操复盘和后续查阅的版本。这一篇进入第 7 章图表部分主题是在 Python 中制作饼图。相比前面处理 Excel 数据、筛选数据、汇总数据图表的价值在于把数据结论变得更直观。尤其是饼图它最适合表达一个问题各部分在整体中分别占多少。比如桌面运维场景里工单类型有网络、软件、硬件、权限销售分析场景里收入来源有区域、产品、渠道资产管理场景里设备品牌有联想、惠普、戴尔、其他。这类问题如果只看表格读者要自己算比例如果换成饼图结构关系一眼就能看出来。这张图展示了本文的核心主题用 Python 制作饼图让数据占比结构更直观。从这张图中我们可以看出饼图的核心不是炫技而是把“网络、软件、硬件、权限”等类别在整体中的比例关系展示出来。对于读者来说它比一串数字更容易形成第一判断。读完这篇文章至少要带走三件事1. 饼图适合展示什么数据不适合展示什么数据2. 如何用matplotlib快速画出可读的饼图3. 如何把普通饼图改造成适合汇报和交付的图表。准备分类数据使用 plt.pie 画基础饼图添加百分比和标题突出重点扇区合并长尾类别为其他形成可交付图表2. 为什么要学饼图一眼看懂占比结构柱形图擅长比较数量大小折线图擅长展示趋势变化散点图适合观察相关关系。饼图的定位比较明确展示整体中的组成结构。如果你的问题是“哪个类别最多”“各类别占总量多少”“主要构成集中在哪几类”饼图是可以用的。但如果你的问题是“哪个月增长最快”“不同类别之间差了多少具体数值”饼图就不是最优选择。饼图不是万能图表。它适合看占比不适合看趋势也不适合类别特别多的情况。类别一旦超过 6 个饼图就很容易变成一张“彩色披萨”看起来热闹实际很难读。我在实际工作中更推荐把饼图用于这些场景1. 工单类型占比网络、软件、硬件、权限2. 故障原因占比驱动、补丁、兼容、人为操作3. 时间消耗占比排查、沟通、远程、现场4. 设备品牌占比联想、惠普、戴尔、其他5. 产品销售占比核心产品、普通产品、长尾产品。推荐做法如果你只是想表达“谁多谁少”柱形图往往更清楚如果你要表达“各部分占整体的比例”饼图才更合适。3. 最小可用一段代码画出第一张饼图先看最小可用版本。Python 里制作饼图最常用的是matplotlib.pyplot里的plt.pie()函数。它至少需要两类数据一类是每个扇区的名称一类是每个扇区对应的数值。这张图展示了“第一张饼图”的最小实现左侧是基础代码右侧是生成出的饼图效果。从这张图中我们可以看出饼图入门并不复杂。只要准备好labels和sizes再调用plt.pie()就能快速得到一张基础饼图。最小代码如下importmatplotlib.pyplotasplt labels[网络,软件,硬件,权限]sizes[35,40,15,10]plt.pie(sizes,labelslabels)plt.show()这段代码里labels表示每一块的名称sizes表示每一块对应的数值。只要数值是同一口径即可不一定非要提前换算成百分比plt.pie()会按数值占总和的比例自动分配扇区大小。原理说明饼图不是直接画“百分比”而是先计算每个数值在总和中的占比再根据占比换算成圆周角度。例如总数是 100某项是 35那么它对应的扇区就是整个圆的 35%。4. 让饼图可读显示百分比 保持圆形最基础的饼图虽然能显示类别但还不够适合发布或汇报。因为读者看到扇区大小之后还需要知道具体百分比是多少。所以真正可读的饼图通常要加上百分比标注。这张图展示了两个关键参数用autopct显示百分比用axis(equal)保持饼图为圆形。从这张图中我们可以看出百分比标注能让数据更直观保持圆形则能避免图形被窗口拉伸后变形。饼图一旦变成椭圆视觉判断就会出现偏差。对应代码如下importmatplotlib.pyplotasplt labels[网络,软件,硬件,权限]sizes[35,40,15,10]plt.pie(sizes,labelslabels,autopct%.1f%%,startangle90)plt.axis(equal)plt.title(工单类型占比)plt.show()这里有三个参数要重点理解autopct%.1f%%表示显示百分比并保留 1 位小数startangle90表示从 12 点方向开始绘制让图形更整齐plt.axis(equal)表示横纵比例保持一致避免饼图变形。注意如果中文标题或标签显示成方块通常不是代码逻辑错了而是 matplotlib 没有正确加载中文字体。可以在代码开头加上中文字体配置importmatplotlib.pyplotasplt plt.rcParams[font.sans-serif][SimHei]plt.rcParams[axes.unicode_minus]False5. 突出重点explode shadow 让关键项更明显在汇报图表里有时候不是所有类别都同等重要。比如软件类工单占比最高或者某个问题是领导最关注的风险项这时可以用explode把某个扇区“拉出来”再配合shadow增强层次感。这张图展示了explode shadow的效果软件扇区被单独突出视觉上更容易被注意到。从这张图中我们可以看出突出扇区不是为了让图更花而是为了服务表达重点。如果某个类别是核心问题来源就应该让读者第一眼看到它。示例代码如下importmatplotlib.pyplotasplt plt.rcParams[font.sans-serif][SimHei]plt.rcParams[axes.unicode_minus]Falselabels[网络,软件,硬件,权限]sizes[35,40,15,10]explode[0,0.1,0,0]plt.pie(sizes,labelslabels,autopct%.1f%%,explodeexplode,shadowTrue,startangle90)plt.axis(equal)plt.title(工单类型占比)plt.show()explode是一个列表长度必须和labels、sizes一致。哪个位置写了非 0 值哪个扇区就会向外偏移。上面代码中explode [0, 0.1, 0, 0]表示突出第二项“软件”。推荐做法只突出一个最关键的扇区不要每一块都突出。全部都突出就等于没有重点。6. 真实工作中的可交付饼图TopN 其他饼图最常见的翻车点是类别太多。比如一个销售数据里有十几个品类或者工单类型被拆得很细如果全部放进饼图结果只会变得拥挤、难读、没有重点。这张图展示了更适合交付的做法保留 TopN 重点类别把长尾类别合并为“其他”。从这张图中我们可以看出TopN 其他的处理方式能让图表保持清爽同时又不会丢掉长尾数据。对于汇报来说读者真正关心的通常是前几类主因而不是每一个很小的类别。下面是一个常用模板importmatplotlib.pyplotasplt plt.rcParams[font.sans-serif][SimHei]plt.rcParams[axes.unicode_minus]Falselabels[网络,软件,硬件,权限,打印机,VPN,会议室设备]sizes[35,40,15,10,3,2,1]# 按数值从大到小排序pairssorted(zip(sizes,labels),reverseTrue)# 保留 Top4其余合并为“其他”top_n4toppairs[:top_n]restpairs[top_n:]show_sizes[p[0]forpintop]show_labels[p[1]forpintop]ifrest:show_sizes.append(sum(p[0]forpinrest))show_labels.append(其他)plt.pie(show_sizes,labelsshow_labels,autopct%.1f%%,startangle90)plt.axis(equal)plt.title(工单类型占比Top4 其他)plt.show()原理说明TopN 其他不是改数据而是改变展示粒度。原始数据仍然可以保留完整明细只是在图表展示时把小类别合并避免读者被长尾噪音干扰。风险提醒“其他”占比如果很大不能简单忽略。比如“其他”占比达到 30% 以上说明分类粒度可能不合理或者长尾问题本身也值得进一步拆解。7. 封装函数把饼图能力沉淀成脚本模板如果每次都复制一大段绘图代码很快就会变成新的重复劳动。更稳妥的方式是把常用逻辑封装成函数比如支持中文、支持 TopN 其他、支持突出最大项、支持标题。下面这个函数可以直接放进自己的脚本库里importmatplotlib.pyplotaspltdefdraw_pie(labels,sizes,title占比饼图,top_n6,explode_maxTrue): 绘制可交付饼图 1. 支持中文显示 2. 支持 TopN 其他 3. 支持突出最大项 4. 自动显示百分比 plt.rcParams[font.sans-serif][SimHei]plt.rcParams[axes.unicode_minus]Falsepairssorted(zip(sizes,labels),reverseTrue)toppairs[:top_n]restpairs[top_n:]show_sizes[p[0]forpintop]show_labels[p[1]forpintop]ifrest:show_sizes.append(sum(p[0]forpinrest))show_labels.append(其他)explode[0]*len(show_sizes)ifexplode_maxandshow_sizes:explode[0]0.08plt.figure(figsize(8,6))plt.pie(show_sizes,labelsshow_labels,autopct%.1f%%,startangle90,explodeexplode,shadowTrue)plt.axis(equal)plt.title(title)plt.show()labels[网络,软件,硬件,权限,打印机,VPN,会议室设备]sizes[35,40,15,10,3,2,1]draw_pie(labels,sizes,title工单类型占比Top6 其他,top_n6,explode_maxTrue)这个函数的价值不在于代码多复杂而在于把常见的图表交付规则固定下来了。后续只要换labels和sizes就能快速生成一张规范饼图。推荐做法如果你经常做 Excel 数据分析可以把柱形图、折线图、饼图分别封装成函数形成自己的图表模板库。这样每次做图时就不是从零开始写代码。8. 常见问题与踩坑提醒饼图代码看起来简单但真正发布或交付时常见问题并不少。问题 1中文显示乱码或方块。这通常是字体配置问题。优先在代码开头配置SimHei如果系统没有这个字体就需要换成本机已有中文字体。问题 2饼图变成椭圆。这是因为横纵比例不一致。加上plt.axis(equal)保证图形保持圆形。问题 3类别太多看不清。不要硬塞所有类别。优先使用 TopN 其他。问题 4百分比显示太挤。如果扇区太小百分比容易重叠。可以减少类别数量或者把小类别合并。问题 5误用饼图表达趋势。趋势应该用折线图数量对比应该用柱形图占比结构才适合用饼图。经验判断一张饼图是否合格不看它有多炫而看读者能不能在 3 秒内看出主要结构。如果 3 秒内看不懂这张图就需要重做。9. 我的总结提升这一篇的核心不是简单记住plt.pie()这个函数而是理解饼图在数据分析中的定位。饼图最适合展示占比结构不适合展示趋势也不适合展示太多类别。我从这一节带走的关键结论有三点。第一饼图解决的是“组成结构”问题。如果你想表达整体由哪些部分构成各部分分别占多少饼图是合适的。第二可交付饼图必须控制类别数量。类别太多时优先使用 TopN 其他而不是把所有小项都挤进图里。第三图表不是装饰而是结论表达工具。如果一张图不能帮助读者更快理解结论它就没有完成任务。后续继续学习图表自动化时我建议把重点放到“从 Excel 读取数据 → 自动生成图表 → 写回 Excel 报告”这一条链路上。只有这样Python 画图才不只是练习代码而是真正进入办公自动化场景。11. 发布版补充我建议这样使用这篇笔记这一节在书中的位置是第7章 案例01 举一反三核心主题是在 Python 中制作饼图。我不建议只把它当成“画图函数笔记”而应该把它放到 Excel 自动化和数据可视化流程里理解先明确要展示什么数据关系再选择是否使用饼图最后确认图表是否真的帮助读者看懂结论。最容易翻车的地方不是plt.pie()写错而是图表选型不对、类别太多、中文乱码、百分比拥挤、以及没有对图表结果做解释。我的建议是以后凡是做饼图都先问一句——这张图是不是在表达“占比结构”如果不是就不要硬用饼图。图表工具越简单越要克制使用。返回顶部 返回顶部点击回到顶部