个人主页杨利杰YJlio❄️个人专栏《Sysinternals实战教程》 《Windows PowerShell 实战》 《WINDOWS教程》 《IOS教程》《微信助手》 《锤子助手》 《Python》 《Kali Linux》《那些年未解决的Windows疑难杂症》让复杂的事情更简单让重复的工作自动化《超简单用 Python 让 Excel 飞起来》读书笔记第8章 扩展 图表美化从画出来到看得懂1. 第8章 扩展 图表美化从画出来到看得懂2. 颜色和样式控制先建立稳定的视觉规则2.1 基础颜色设置2.2 线型和标记点3. 标题、坐标轴和标签让图表自己会说话3.1 标题要给结论不只是命名3.2 数据标签不要滥用4. 进阶美化技巧刻度、注释和高清导出4.1 x 轴标签太密时旋转角度4.2 使用 annotate 标记关键点4.3 高清导出别让好图毁在分辨率上5. 封装统一美化函数让所有图表风格一致5.1 基础版统一美化函数5.2 进阶版加入导出函数6. 企业可交付版示例从 Excel 读取数据并输出美化图表7. 常见问题与踩坑记录7.1 中文乱码7.2 图例挡住数据7.3 图片保存后边缘被裁掉7.4 标题写得太虚7.5 美化过头8. 总结图表美化不是装饰是信息表达工程9. 我的总结提升1. 第8章 扩展 图表美化从画出来到看得懂V4修正版进度标记本篇为 07月12日 第2篇承接前面 Python Excel 自动化读书笔记系列继续更新。这一篇对应的是《超简单用 Python 让 Excel 飞起来》中关于图表美化的扩展内容。前面我们已经学过柱形图、条形图、折线图、组合图、饼图、面积图、雷达图等常见图表类型但真正用于博客、周报、PPT 或数据汇报时仅仅“画出来”还不够。很多图表最大的问题不是代码写错而是读者看不懂。比如标题没有结论、坐标轴没有单位、颜色没有规则、标签挤在一起、导出的图片一放到 PPT 里就糊这些都会让图表的表达价值打折。所以图表美化的目标不是花哨而是让信息更容易被理解。我更愿意把它理解成“可视化到可读化”的过程先保证数据准确再让读者一眼看出重点。这张配图适合作为全文开篇用来对比“只是画出来”和“真正看得懂”的区别从这张图中可以看出美化前后的差异并不只是颜色变漂亮了而是图表的阅读路径变清楚了标题更明确、坐标轴更干净、数据对比更突出读者不需要反复猜测图表到底想表达什么。本文会围绕 Matplotlib 图表美化中的几个核心动作展开颜色与样式、标题与标签、刻度与注释、高清导出、统一模板封装。读完之后你应该能把一张“能运行的图”改造成一张“能交付的图”。原始数据绘制基础图表设置颜色和样式补充标题和坐标轴添加标签与注释调整刻度和布局高清导出形成可交付图表2. 颜色和样式控制先建立稳定的视觉规则图表美化的第一步不是疯狂换颜色而是建立稳定的视觉规则。颜色如果没有规则就会变成装饰颜色如果有规则就会变成信息。比如在运维报表里我通常会这样区分数量类指标使用蓝色系代表稳定、客观、基础数据趋势类指标使用线条或浅色辅助表达变化方向异常类指标使用红色或橙色突出风险和警示这个原则很重要。不要每张图都重新配色否则读者每次都要重新理解颜色含义。这张配图适合放在颜色与样式部分用来说明图表外观参数并不是孤立存在的从这张图中可以看出颜色、线型、透明度、标记样式其实共同决定了图表的可读性。真正成熟的图表不是把所有效果都加上而是让每一种视觉元素都有明确用途。2.1 基础颜色设置importmatplotlib.pyplotasplt plt.rcParams[font.sans-serif][SimHei]plt.rcParams[axes.unicode_minus]Falsemonths[1月,2月,3月,4月,5月,6月]tickets[120,98,135,110,150,160]plt.figure(figsize(9,6))plt.bar(months,tickets,color#4da8ee,alpha0.85,edgecolorblack)plt.title(月度工单数量统计)plt.xlabel(月份)plt.ylabel(工单数量单)plt.grid(axisy,linestyle--,alpha0.35)plt.tight_layout()plt.show()这里的 color 决定主体颜色alpha 控制透明度edgecolor 用来增强柱子的边界感。如果图表需要投屏或截图到群里边界线能明显提升可读性。2.2 线型和标记点折线图不要只靠颜色区分。因为截图压缩、投影仪偏色、黑白打印时颜色可能会失真。这时候线型和标记点就很重要。plt.plot(months,tickets,linestyle--,markero,linewidth2)常用参数含义如下参数作用推荐场景linestyle--设置虚线区分目标线、参考线markero给数据点加圆点强调每个时间点linewidth2加粗线条提升投屏可读性alpha0.7设置透明度避免图形遮挡不要为了好看乱用颜色。颜色的首要任务是传递信息而不是制造视觉热闹。3. 标题、坐标轴和标签让图表自己会说话很多图表看起来不专业问题不在图形本身而在标题和标签缺失。读者看到一张图最先会问三个问题这是什么数据横轴代表什么纵轴单位是什么如果这些信息缺失图再漂亮也不适合交付。我建议标题尽量写成“带结论的标题”。不要只写“月度工单趋势”可以写成“月度工单趋势5月至6月明显上升”。这样读者打开图的第一秒就能抓到重点。这张配图适合放在标题与标签部分用来说明一个清晰标题和数据标签对读图效率的提升从这张图中可以看出标题、数据标签、图例和结论提示共同构成了一张图的“解释层”。没有这些信息读者只能看形状有了这些信息读者才能直接读出结论。3.1 标题要给结论不只是命名importmatplotlib.pyplotasplt plt.rcParams[font.sans-serif][SimHei]plt.rcParams[axes.unicode_minus]Falsemonths[1月,2月,3月,4月,5月,6月]tickets[120,98,135,110,150,160]plt.figure(figsize(9,6))plt.plot(months,tickets,markero,linewidth2,label工单数量)plt.title(月度工单趋势5-6月明显上升)plt.xlabel(月份)plt.ylabel(工单数量单)plt.grid(axisy,linestyle--,alpha0.35)plt.legend()plt.tight_layout()plt.show()这里的标题不是简单说明“这是一张趋势图”而是直接告诉读者图表里最值得关注的变化。这类标题尤其适合周报、月报、领导汇报和数据复盘。3.2 数据标签不要滥用数据标签能提升信息密度但不是越多越好。如果每一个点、每一根柱子都贴满数字图表会变成“贴纸墙”。推荐做法数据点较少时可以全部加标签数据点较多时只标注最大值、最小值、最后一个值折线密集时不要强行给每个点都加标签示例只标注最高点。max_idxtickets.index(max(tickets))plt.figure(figsize(9,6))plt.plot(months,tickets,markero,linewidth2)plt.text(max_idx,tickets[max_idx]3,f最高{tickets[max_idx]},hacenter,vabottom)plt.title(月度工单趋势最高点出现在6月)plt.xlabel(月份)plt.ylabel(工单数量单)plt.grid(axisy,linestyle--,alpha0.35)plt.tight_layout()plt.show()这一步的核心要点是标签应该服务于结论而不是服务于堆满画面。4. 进阶美化技巧刻度、注释和高清导出当图表用于博客、报告或 PPT 时进阶美化通常集中在三个细节上刻度是否清楚、关键点是否突出、导出是否清晰。这些细节不复杂但非常影响最终观感。这张配图适合放在进阶美化部分用来说明注释、关键点、刻度和高清导出这些细节对交付质量的影响从这张图中可以看出进阶美化不是盲目增加视觉元素而是围绕关键数据做增强。比如标记峰值、控制刻度密度、提高导出清晰度这些动作都能降低读者理解成本。4.1 x 轴标签太密时旋转角度时间序列图最常见的问题就是横轴挤在一起。尤其是月份、日期、部门名称比较长时如果不处理文字会互相覆盖。plt.xticks(rotation30,haright)一般来说rotation30 或 rotation45 就够用。如果转到 90 度说明图表信息可能已经太密需要考虑减少数据点或改成横向图。4.2 使用 annotate 标记关键点plt.text() 适合普通标签plt.annotate() 更适合强调关键点因为它可以加箭头。importmatplotlib.pyplotasplt months[1月,2月,3月,4月,5月,6月]tickets[120,98,135,110,150,160]max_idxtickets.index(max(tickets))plt.figure(figsize(9,6))plt.plot(months,tickets,markero,linewidth2)plt.annotate(最高点,xy(months[max_idx],tickets[max_idx]),xytext(months[max_idx],tickets[max_idx]15),arrowpropsdict(arrowstyle-),hacenter)plt.title(月度工单趋势6月达到最高)plt.xlabel(月份)plt.ylabel(工单数量单)plt.grid(axisy,linestyle--,alpha0.35)plt.tight_layout()plt.show()注释的价值在于把读者的注意力引导到关键数据点上。如果图表里有异常峰值、明显下降、目标达成点都可以用注释处理。4.3 高清导出别让好图毁在分辨率上很多人图画得不错但保存出来一放到 PPT 或 CSDN 里就发糊问题通常出在导出参数上。plt.savefig(out.png,dpi300,bbox_inchestight)参数作用dpi300提高图片清晰度适合博客、PPT、打印bbox_inchestight自动裁剪边缘空白transparentTrue导出透明背景适合后期叠加设计formatpng输出 PNG 图片适合图表类内容注意不要只截图保存图表。截图会受屏幕分辨率影响尤其在高 DPI 屏幕和普通显示器之间复制时很容易变糊。5. 封装统一美化函数让所有图表风格一致如果只画一张图手动设置标题、坐标轴、网格线、图例当然没问题。但如果你要持续写系列文章或者每周都要输出报表就不能每张图都重复写一遍美化代码。更好的做法是把通用美化动作封装成函数。这样后续所有图表都能复用同一套风格文章和报表看起来也更统一。这张配图适合放在统一模板封装部分用来说明一套模板可以服务多种图表类型从这张图中可以看出统一模板的核心价值不是“省几行代码”而是让不同图表保持一致的表达风格。对于系列博客、自动化报表和企业汇报来说这一点很关键。5.1 基础版统一美化函数importmatplotlib.pyplotaspltdefbeautify_axes(ax,title:str,xlabel:str,ylabel:str): 统一美化 Matplotlib 图表坐标轴 ax.set_title(title)ax.set_xlabel(xlabel)ax.set_ylabel(ylabel)ax.grid(True,linestyle--,alpha0.35)使用示例fig,axplt.subplots(figsize(9,6))ax.bar([1月,2月,3月],[10,15,9],alpha0.85,edgecolorblack)beautify_axes(ax,title示例统一风格柱形图,xlabel月份,ylabel数量单)plt.tight_layout()plt.show()这段函数看起来很简单但实际价值很高。后续只要你画的是 Matplotlib 图就可以调用它统一设置标题、坐标轴和网格线。5.2 进阶版加入导出函数frompathlibimportPathdefsave_chart(out_path:str,dpi:int300): 统一保存图表自动创建目录避免导出失败 out_pathPath(out_path)out_path.parent.mkdir(parentsTrue,exist_okTrue)plt.tight_layout()plt.savefig(out_path,dpidpi,bbox_inchestight)plt.close()returnstr(out_path)这里顺手处理了目录创建问题。如果 out/ 文件夹不存在脚本会自动创建不会因为路径不存在而报错。6. 企业可交付版示例从 Excel 读取数据并输出美化图表下面这段代码把前面讲的内容串起来读取 Excel 数据绘制图表设置标题、颜色、网格、标签并导出高清 PNG。它更接近真实办公自动化脚本。importpandasaspdimportmatplotlib.pyplotaspltfrompathlibimportPath plt.rcParams[font.sans-serif][SimHei]plt.rcParams[axes.unicode_minus]Falsedefbeautify_axes(ax,title:str,xlabel:str,ylabel:str):ax.set_title(title)ax.set_xlabel(xlabel)ax.set_ylabel(ylabel)ax.grid(True,linestyle--,alpha0.35)defsave_chart(out_path:str,dpi:int300):out_pathPath(out_path)out_path.parent.mkdir(parentsTrue,exist_okTrue)plt.tight_layout()plt.savefig(out_path,dpidpi,bbox_inchestight)plt.close()returnstr(out_path)defexcel_to_beautified_chart(xlsx_path:str,sheet_name:str,x_col:str,y_col:str,out_png:strout/beautified_chart.png):dfpd.read_excel(xlsx_path,sheet_namesheet_name)xdf[x_col].astype(str).tolist()ypd.to_numeric(df[y_col],errorscoerce).fillna(0).tolist()fig,axplt.subplots(figsize(9,6))barsax.bar(x,y,color#4da8ee,alpha0.85,edgecolorblack)fori,vinenumerate(y):ax.text(i,v,str(int(v)),hacenter,vabottom)beautify_axes(ax,titlef{y_col}趋势自动生成美化图表,xlabelx_col,ylabely_col)returnsave_chart(out_png)if__name____main__:pngexcel_to_beautified_chart(xlsx_pathreport.xlsx,sheet_name数据,x_col月份,y_col工单数量,out_pngout/工单数量_美化图表.png)print(✅ 已输出,png)这段代码适合放进自己的办公自动化脚本库。以后只要 Excel 表头一致就可以稳定生成风格统一的图表。注意真实环境中最容易出问题的不是绘图代码而是 Excel 字段名不一致、数据里混入文本、文件路径写错、图片输出目录不存在。脚本如果要给同事复用建议把这些异常处理补上。7. 常见问题与踩坑记录7.1 中文乱码Matplotlib 默认字体环境不一定支持中文。如果标题或坐标轴出现方块优先加下面两行plt.rcParams[font.sans-serif][SimHei]plt.rcParams[axes.unicode_minus]False如果电脑没有 SimHei可以换成 Microsoft YaHeiplt.rcParams[font.sans-serif][Microsoft YaHei]7.2 图例挡住数据图例位置不合适时可以手动指定plt.legend(locupper left)如果图例在图外更合适可以使用plt.legend(locupper right,bbox_to_anchor(1.2,1.0))7.3 图片保存后边缘被裁掉导出时加上plt.savefig(out.png,dpi300,bbox_inchestight)7.4 标题写得太虚标题不要只写“数据分析图”。更推荐写成月度工单趋势6月达到最高点软件故障排行Outlook 与 Teams 问题占比最高设备报修趋势5月后故障量明显下降标题写得越具体图表越接近可交付状态。7.5 美化过头美化过头也是问题。颜色太多、字体太花、网格太重、标签太密都会让图表更难读。图表美化的底线是每一个视觉元素都要帮助读者更快理解数据。8. 总结图表美化不是装饰是信息表达工程这一节我最大的收获是图表美化不是为了把图做得“炫”而是为了让读者更快看懂结论。我建议记住这几条规则颜色要有规则同类指标尽量保持统一配色标题要带结论不要只命名要帮助读者读图标签要克制标关键值不要把图贴满注释要服务重点把读者视线引到关键异常点导出要高清dpi300 bbox_inchestight很实用模板要复用把重复美化动作封装成函数。真正可交付的图表应该做到不靠解释也能让读者看懂。下一篇如果继续写第8章后续内容我建议进入“图表保存与批量导出”或者“批量生成报告图表”这样就能从单张图表美化进一步升级到自动化报表生成。9. 我的总结提升这篇文章表面上讲的是 Matplotlib 图表美化但放到 Python Excel 办公自动化场景里看它其实是在解决一个更实际的问题如何让自动化生成的结果真正能交付。很多脚本能跑通但输出结果只能自己看真正成熟的脚本应该能直接输出给同事、领导、博客读者减少二次加工。所以我后面写办公自动化脚本时会越来越重视“输出质量”不仅要把数据算出来还要把结果整理成别人能读懂、能复核、能直接使用的形式。如果只会画图但不会让图表表达结论那图表只是截图如果图表能自己说明问题它才是报告的一部分。返回顶部