使用matplotlib自定义清晰的可视化代码
Matplotlib 入门到实战从安装到画出论文级图表适合谁读刚学 Python、想把数据画成图、写博客/做科研需要出图的同学。环境Windows / macOS / Linux 通用示例代码以 Python 3 Windows 为主。阅读时长约 15 分钟跟着敲一遍就能上手。一、为什么要学 Matplotlib它好在哪Matplotlib 是 Python 里最基础的绘图库几乎所有数据可视化工具seaborn、pandas 画图、深度学习框架可视化都建立在它之上。选它的理由1. 纯 Python、生态无缝衔接你用numpy算好的数组、pandas读好的表格、torch训好的曲线直接喂给 Matplotlib 就能画不用在不同软件间导来导去。2. 可脚本化、结果可复现Excel / Origin 是手点鼠标出图换个数据就得重画一遍。Matplotlib 是代码出图——数据变了改个数字重跑脚本图自动更新永远一致。这对科研、博客配图尤其重要。3. 出版级输出格式支持png / pdf / svg / eps分辨率dpi随便调。矢量图pdf/svg放到论文里放大不糊这是截图做不到的。4. 从一行出图到像素级控制都支持新手用plt.plot()一行就能出图老手用面向对象 API 能精确控制每一个边框、刻度、字体。一套工具覆盖全阶段。5. 免费、开源、跨平台不用买授权Windows / Mac / Linux 行为一致。简单对比工具适合场景缺点Excel随手画、临时看难复现、不美观、不能批处理Origin科研标配付费、闭源、换数据麻烦Matplotlib脚本化、可复现、出版级上手要写几行代码二、安装下载命令方式一pip 安装最通用pipinstallmatplotlibnumpy会作为依赖自动装好。如果你用的是国内网络、下载慢可以加清华源pipinstallmatplotlib-ihttps://pypi.tuna.tsinghua.edu.cn/simple推荐先建虚拟环境再装避免把包装得到处都是、互相冲突python-mvenv venv# 建环境venv\Scripts\activate# Windows 激活Mac/Linux 用 source venv/bin/activatepipinstallmatplotlib方式二Anaconda 用户condainstallmatplotlib验证安装是否成功importmatplotlibprint(matplotlib.__version__)能打印出版本号如3.9.4就说明装好了。三、基础使用教程3.1 你的第一张图importmatplotlib.pyplotasplt x[1,2,3,4,5]y[2,4,1,8,5]plt.plot(x,y)# 画线plt.title(My First Plot)plt.xlabel(X axis)plt.ylabel(Y axis)plt.show()# 弹窗显示pyplotplt是 Matplotlib 提供的快捷方式模块plot画线、show弹窗。3.2 理解两张画布Figure 与 Axes很多初学者分不清这两个概念记住一句话Figure 整张纸Axes 纸上的一块画图区域坐标系fig,axplt.subplots()# 推荐面向对象写法ax.plot(x,y)ax.set_title(用 Axes 画)plt.show()3.3 常见图类型一览图类型代码用途折线图ax.plot(x, y)趋势、训练曲线散点图ax.scatter(x, y)相关性、分布柱状图ax.bar(x, h)类别对比直方图ax.hist(data)数据分布饼图ax.pie(sizes)占比3.4 让图变好看美化四件套ax.plot(x,y,color#4C72B0,linewidth2,linestyle--,markero,label曲线A)ax.set_title(标题,fontsize14,weightbold)ax.set_xlabel(X);ax.set_ylabel(Y)ax.legend()# 显示图例靠 labelax.grid(alpha0.3)# 淡网格线color用#RRGGBB十六进制色比英文色名更精准linestyle--虚线markero数据点圆圈ax.legend()必须配合label才会显示3.5 中文显示必看的坑默认 Matplotlib 不含中文字体中文会显示成方块。一行搞定plt.rcParams[font.sans-serif][SimHei]# Windows 用黑体plt.rcParams[axes.unicode_minus]False# 让负号正常显示不同系统换字体名系统字体设置Windows[SimHei]macOS[Arial Unicode MS]或[PingFang SC]Linux[WenQuanYi Zen Hei]文泉驿3.6 保存图片而不是只弹窗plt.savefig(figure.png,dpi300,bbox_inchestight)dpi300打印/出版清晰度博客用 150 足够bbox_inchestight自动去掉周围白边想放论文存pdf或svg矢量无限放大不糊顺序提醒先savefig再showshow()之后图会被清空savefig 可能存到空白。3.7 无界面环境服务器/脚本必加一行在没有显示器的环境服务器、CI、后台脚本直接画图会报错。在import pyplot之前加importmatplotlib matplotlib.use(Agg)# 指定无界面后端importmatplotlib.pyplotasplt这样图只会存成文件不尝试弹窗。四、实战画一张论文级雷达图雷达图蜘蛛图用来对比多个模型在多个指标上的综合能力。下面是一段独立可跑的代码特点是网格是等边多边形不是默认的圆更符合出版审美支持中文能在无界面环境运行 雷达图 / 蜘蛛图绘制脚本 (Radar / Spider Chart) —— 等边多边形网格版 用途: 论文中多模型在多个指标上的综合对比可视化 依赖: matplotlib, numpy (yolonew_env 已包含) 改数据只动下面三处(1 指标名 / 2 各模型原始值 / 3 无需改,自动归一化) importmatplotlib matplotlib.use(Agg)# 无界面环境也能存图importnumpyasnpimportmatplotlib.pyplotaspltfrommathimportpi,cos,sin# 1. 指标名称(按需修改) METRICS[mAP0.5,mAP0.5:0.95,Precision,Recall,轻量性,实时性]Nlen(METRICS)# 2. 各模型原始数据(把真实结果填进来) # 精度类直接填真实值(0~1): map50 / map(mAP50-95) / p / r# params 单位 M(百万); fps 填实测帧率(相对值也可,仅用于绘图)RAW{YOLOv8n:dict(map500.7716,map0.5850,p0.770,r0.700,params3.20,fps142),CBAM:dict(map500.7854,map0.6000,p0.800,r0.720,params3.02,fps138),YOLOv8s:dict(map500.9350,map0.7720,p0.870,r0.820,params11.2,fps88),GVC(ours):dict(map500.7761,map0.5937,p0.772,r0.7085,params2.70,fps150),}COLORS[#4C72B0,#55A868,#C44E52,#DD8452]# 3. 归一化(全部转成越大越好, 0~1) PMINmin(d[params]fordinRAW.values())# 最轻模型作基准 - 轻量性FMAXmax(d[fps]fordinRAW.values())# 最快模型作基准 - 实时性DATA{}forname,dinRAW.items():DATA[name][d[map50],d[map],d[p],d[r],PMIN/d[params],# 参数量越小越轻 - 取倒数归一d[fps]/FMAX,# 帧率越大越快]# 4. 绘图(直角坐标 三角函数 - 等边多边形网格) # 各轴角度: 从正上方开始, 逆时针均匀 N 份 - 自然形成正 N 边形angles[pi/22*pi*i/Nforiinrange(N)]plt.rcParams[font.sans-serif][SimHei]# Windows 中文plt.rcParams[axes.unicode_minus]Falsefig,axplt.subplots(figsize(7,7),dpi150)ax.set_aspect(equal)# 保证多边形不被拉伸ax.axis(off)# ---- 网格: 每层一个同心正 N 边形 ----levels[0.2,0.4,0.6,0.8,1.0]forrinlevels:xs[r*cos(a)forainangles][r*cos(angles[0])]ys[r*sin(a)forainangles][r*sin(angles[0])]ax.plot(xs,ys,color#cccccc,lw0.8,alpha0.7)# 刻度数值标在第一根轴(正上方)左侧ax.text(-0.04,r,f{r:.1f},haright,vacenter,fontsize8,colorgrey)# ---- 轴射线 指标名 ----fori,ainenumerate(angles):ax.plot([0,cos(a)],[0,sin(a)],color#cccccc,lw0.8,alpha0.7)x,y1.12*cos(a),1.12*sin(a)hacenterifcos(a)0.1:haleftelifcos(a)-0.1:harightax.text(x,y,METRICS[i],haha,vacenter,fontsize12)# ---- 各模型数据多边形 ----for(name,vals),colorinzip(DATA.items(),COLORS):xs[v*cos(a)forv,ainzip(vals,angles)][vals[0]*cos(angles[0])]ys[v*sin(a)forv,ainzip(vals,angles)][vals[0]*sin(angles[0])]ax.plot(xs,ys,linewidth2,labelname,colorcolor)ax.fill(xs,ys,alpha0.10,colorcolor)ax.set_xlim(-1.35,1.35)ax.set_ylim(-1.35,1.35)ax.legend(locupper right,bbox_to_anchor(1.22,1.10),fontsize11,frameonFalse)plt.title(多模型综合性能雷达对比 (GVC vs 基线),fontsize14,pad22,weightbold)plt.tight_layout()plt.savefig(gvc_radar_chart.png,dpi150,bbox_inchestight)print([OK] saved gvc_radar_chart.png)关键点解释极坐标polarTrue的外圈永远是圆所以用直角坐标 三角函数算顶点才能画出正 N 边形set_aspect(equal)保证不被拉成椭圆改数据只动models字典图自动更新在这里插入图片描述五、常见坑速查表现象原因解决办法中文显示成方块缺中文字体rcParams[font.sans-serif][SimHei]服务器上报错无显示器matplotlib.use(Agg)保存的图是空白show()在savefig之前先savefig再show多条线叠在一起复用了同一个 axes每次画图前fig, ax plt.subplots()负号显示成方块字体问题rcParams[axes.unicode_minus]False图被裁掉一部分布局太挤bbox_inchestight或plt.tight_layout()六、总结 学习资源Matplotlib 上手只要记住三件事plot画线、savefig存图、rcParams解决中文。掌握基础后你会发现写代码出图比手点鼠标快得多而且永不走样。进阶方向seaborn在 Matplotlib 上封装统计图更漂亮、代码更短plotly交互式图表鼠标悬停看数值适合网页官网画廊https://matplotlib.org/gallery — 想要什么图直接抄示例代码改数据收藏本文下次画图直接对着速查表改就行。 Happy plotting!

相关新闻

基于RAG与向量数据库构建智能法律问答系统:从原理到工程实践

基于RAG与向量数据库构建智能法律问答系统:从原理到工程实践

1. 项目背景与核心概念 在传统的法律援助服务中,用户常常面临咨询渠道不畅、专业律师资源有限、等待时间长以及信息检索效率低下等问题。随着人工智能技术的飞速发展,特别是大语言模型(LLM)的涌现,为构建智能化、即时化…

2026/10/15 0:14:15 阅读更多 →
【计算机网络 | 第六章】应用层

【计算机网络 | 第六章】应用层

前言 应用层离用户最近。网页浏览、发邮件、传文件、用域名访问网站,看起来是不同的事情,背后却都要由应用层协议规定通信双方如何组织报文、交换信息。一、网络应用的两种服务方式 应用程序要通过网络协作,常见的组织方式有客户/服务器方式和…

2026/10/12 22:20:43 阅读更多 →
VCSA7.0升级到8.0后自定义角色权限丢失SSO域选错权限异常完整排障指南

VCSA7.0升级到8.0后自定义角色权限丢失SSO域选错权限异常完整排障指南

很多企业从VCSA7.0升级迁移到VCSA8.0,升级过程没有报错,但登录vCenter后发现过去创建的大量自定义角色消失,域用户分配的权限全部失效。 很多运维会误以为升级过程把自定义角色删除,实际上版本升级不会删除SSO内部自定义角色。高频…

2026/10/11 19:22:42 阅读更多 →

最新新闻

CTF新手题easychallenge:Python脚本加密与逆向思路全解析

CTF新手题easychallenge:Python脚本加密与逆向思路全解析

前两天在攻防世界的 CRYPTO 新手练习区刷题,刷到 easychallenge 这一道,名字起得特别诚实,但实战起来也不能说完全 easy。它不考复杂的数学公式,也不考高深的密码算法,更像是给你一段加密脚本,让你自己把它…

2026/10/15 21:22:32 阅读更多 →
ESP8266接OLED:从选型接线到点亮显示全教程

ESP8266接OLED:从选型接线到点亮显示全教程

你有没有过这种体验:ESP8266串口打印出来的数据堆了一屏,盯着串口监视器看得眼花缭乱,明明传感器读出了26.5℃,却没法让这个数字变成一眼能看懂的"画面"。我第一次做物联网小项目时就被这个问题卡了很久。后来接上一块0…

2026/10/15 21:22:32 阅读更多 →
嵌入式C++单链表实战:内存可控的类型擦除链表设计

嵌入式C++单链表实战:内存可控的类型擦除链表设计

1. 这不是教科书里的“单链表”,而是你明天就能抄进项目的实战结构 单链表——这三个字一出来,很多人脑子里立刻浮现出黑板上画的箭头、节点、next指针,还有老师念叨的“头结点不存数据”“遍历时间复杂度O(n)”……但现实里,我带…

2026/10/15 21:22:32 阅读更多 →
ESP8266驱动OLED屏入门:接线、配置与点亮指南

ESP8266驱动OLED屏入门:接线、配置与点亮指南

1. OLED屏与ESP8266的适配思路 手头正好有一块0.96寸的OLED屏,一直想做个小玩意儿,就顺手用ESP8266驱动了起来。先说结论:这对于入门嵌入式显示来说,是很典型也很有意思的组合——OLED功耗低、自发光、显示效果好,ESP8…

2026/10/15 21:22:32 阅读更多 →
ESP8266驱动OLED屏:从选型到点亮,玩转中文显示与动画

ESP8266驱动OLED屏:从选型到点亮,玩转中文显示与动画

做嵌入式小项目时,最烦的不是代码跑不起来,而是跑起来之后什么都看不见。传感器数据全堆在串口里,手机又懒得开,这时候给 ESP8266 配上一块 OLED 屏幕,整个项目立刻“活”了。这篇文章是 OLED 在 ESP8266 中应用系列的…

2026/10/15 21:22:32 阅读更多 →
YOLOv10【第十一章:生成式 AI 与自动标注篇·第1节】生成式 AI 如何赋能 YOLOv10:数据、标签、推理三条路线

YOLOv10【第十一章:生成式 AI 与自动标注篇·第1节】生成式 AI 如何赋能 YOLOv10:数据、标签、推理三条路线

🏆 本文收录于 《YOLOv10实战:从入门到深度优化》 专栏。 该专栏系统复现并深度梳理全网主流 YOLOv10 改进方法与工程实战案例,覆盖分类、目标检测、实例分割、多目标追踪、关键点检测、旋转目标检测等多个方向,坚持 持续更新 + 深度解析 + 工程验证。 专栏将围绕 YOLOv10…

2026/10/15 21:21:31 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 9:49:14 阅读更多 →