网易首页 > 网易号 > 正文 申请入驻

人工智能通识课:Matplotlib 数据可视化

0
分享至

在数据分析、科学计算以及机器学习实践中,数据往往不是先靠“计算结果”被理解,而是先靠“图形表现”被看懂。数字本身当然重要,但当数据规模增大、变量关系变复杂时,仅仅阅读一串数值,往往很难迅速把握整体特征。此时,图形就成为理解数据的重要工具。

例如,一组数据如果直接写成:

[10, 15, 20, 18, 25]

我们只能大致知道它在变化,却不容易立刻感受到变化的趋势、波动的位置以及增长的快慢;但如果将它绘制成折线图,数据走势通常会立即变得清晰得多。也正因为如此,数据可视化几乎贯穿于数据分析的整个过程:在探索阶段帮助我们观察分布,在建模阶段帮助我们检验关系,在结果展示阶段帮助我们传达结论。

在 Python 生态中, 是最基础、也最重要的可视化库之一。许多更高级的可视化工具,本质上都与它存在直接或间接的联系。

一、Matplotlib 是什么

Matplotlib 是 Python 中用于绘制二维图形的通用可视化库。它支持折线图、散点图、柱状图、直方图、饼图等多种常见图形,也可以进一步扩展到更复杂的可视化任务。

它之所以被广泛使用,主要有几个原因。

第一,它覆盖了数据分析中最常见的绘图需求。无论是展示趋势、比较类别、观察分布,还是分析变量关系,Matplotlib 都能提供基础支持。

第二,它与 NumPy、Pandas 等科学计算库结合紧密。很多时候,我们并不是单独“为了画图而画图”,而是在数组计算、表格处理、统计分析之后,顺势进入可视化阶段。Matplotlib 恰好位于这条工作链的末端,是分析结果的主要展示工具之一。

第三,它具有较强的可定制性。图中的线条、颜色、标签、刻度、图例、网格、尺寸、分辨率等,通常都可以调整。这使得它既适合教学演示,也适合科研绘图和工程输出。

安装:

pip install matplotlib

导入时最常见的写法是:

import matplotlib.pyplot as plt

这里的 pyplot 是 Matplotlib 中最常用的接口模块。它提供了一套类似 MATLAB 风格的状态式绘图方式,因此在入门阶段非常常见。不过,Matplotlib 并不仅仅只有这一种写法。要真正理解它,必须先弄清楚它的图形结构。

二、Matplotlib 的图形结构

学习 Matplotlib 时,最容易混淆的问题之一,是“图到底是什么”。很多初学者只记住了 plt.plot()、plt.show(),却没有真正理解一幅图由哪些对象构成。实际上,Matplotlib 的图形系统是有清晰层次的。

从整体上看,可以把它理解为:

Figure → Axes → 具体图形元素

1、Figure:整个图形对象

Figure 表示整个图形对象,可以把它理解为一张完整的画布。它是所有绘图内容的最外层容器。图像的尺寸、分辨率、整体布局等,通常都与 Figure 有关。

2、Axes:实际绘图的区域

Axes 表示一个具体的绘图区,也就是带有坐标系的区域。绝大多数绘图操作,实际上都发生在 Axes 上。折线、散点、柱子、标题、坐标轴标签、图例等,都通常依附于某个 Axes。

很多初学者会把 Axes 理解为“坐标轴”,这并不准确。更合适的理解是:Axes 是一个完整的绘图区,其中包含横轴、纵轴以及这个区域中的各种图形元素。

3、图形元素:线条、文本、图例等

在 Axes 内部,还存在许多更具体的元素,例如:

• 折线

• 散点

• 柱形

• 标题

• 坐标轴标签

• 图例

• 网格线

这些是图中真正被看到的内容。从使用角度看,初学阶段只需要先把握 Figure 和 Axes 的关系即可,不必过早深入到底层对象体系。

4、直观理解

可以把 Matplotlib 的结构粗略理解为:

    └── 坐标轴

如果一张图中包含多个子图,那么一个 Figure 中就会包含多个 Axes。

三、最基本的绘图流程

无论绘制什么类型的图形,Matplotlib 的基本过程大致都可以归纳为以下几步:

1、准备数据

2、创建图形对象或绘图区

3、调用绘图函数

4、添加标题、标签、图例、网格等辅助信息

5、显示图形或保存图像

例如,下面是一段最基础的绘图代码:

plt.show()


这段代码虽然很短,但已经包含了最核心的动作:

• x 和 y 是数据

• plt.plot(x, y) 用于绘制图形

• plt.show() 用于显示图形

不过,这样得到的图通常还比较“原始”。在实际使用中,我们往往还需要进一步补充说明信息。例如:

plt.show()


这时图形就更完整了,因为它不仅有数据曲线,还有标题、坐标轴标签、图例和网格。对于读者来说,图形的可读性会明显提高。

四、最常见的几类基础图形

Matplotlib 支持的图形类型很多,但在入门阶段,应先掌握最常见、最有代表性的几类。它们分别对应不同的数据表达任务。


1、折线图:观察趋势

折线图是最常见的基础图形之一,适合展示数据随某个变量的变化趋势。例如时间序列、训练轮次、函数曲线等,都常常使用折线图。

示例:

plt.show()

折线图强调的是“连续变化”。如果我们关心的是走势、波动、上升下降趋势,那么它通常是首选。

2、散点图:观察变量关系

散点图适合展示两个变量之间的关系。每一个点对应一组观测值,点的分布形态可以帮助我们初步判断相关性、聚集趋势或异常值。

示例:

plt.show()

如果折线图强调“连起来看变化”,那么散点图更强调“分布在哪里、关系怎样”。在回归分析、相关分析和实验观察中,散点图都很常见。

3、柱状图:比较类别大小

柱状图适合比较不同类别的数据大小。例如不同班级人数、不同商品销量、不同模型准确率等,往往都可以用柱状图呈现。

示例:

plt.show()

柱状图强调的是“类别间比较”。它不是为了展示连续变化,而是为了直观比较不同项目之间的差异。

4、直方图:观察数据分布

直方图与柱状图外观相似,但含义不同。它不是用来比较离散类别,而是用来统计数据在各个区间中的分布情况。

示例:

plt.show()

直方图常用于回答这些问题:

• 数据主要集中在哪些范围

• 数据分布是否对称

• 是否接近正态分布

• 是否存在明显偏态或异常集中现象

因此,在统计分析和机器学习的数据探索阶段,直方图尤其常见。

5、饼图:展示整体中的占比

饼图适合展示各部分在整体中的比例关系。

示例:

plt.show()

饼图虽然直观,却并不总是最优选择。当类别较多或各部分差异不明显时,饼图的可读性会明显下降,这时柱状图往往更清晰。因此,饼图适合在类别不多、比例关系明确时使用。

五、状态式绘图与面向对象绘图

所谓“状态式绘图”,可以理解为:当前有一个默认的图形环境,pyplot 会把你的操作自动作用到当前图或当前绘图区上。这种方式依赖的是 pyplot 提供的状态式接口,优点是上手快,代码短,适合简单场景。

比如:

plt.show()

但当图形变复杂时,它也容易让人分不清“当前到底在操作哪一个图、哪一个子图”。

因此,Matplotlib 官方更推荐另一种方式:面向对象绘图。

1、面向对象写法的基本形式

示例:

plt.show()

• fig 表示整个图形对象

• ax 表示具体绘图区

也就是说,图是先被创建出来的,然后再明确地在某个 ax 上绘制内容。

2、为什么更推荐面向对象方式

面向对象写法的最大优点,是结构清楚。尤其当一张图中包含多个子图时,这种优势会更加明显。

示例:

plt.show()


这里的两个子图各自对应一个 Axes 对象。因为每个图都明确属于自己的 ax,所以代码更容易维护,也更不容易混乱。

3、如何理解两种方式的关系

初学时,可以先用状态式写法快速熟悉绘图流程;但随着图形复杂度提高,应逐步过渡到面向对象写法。

从本质上说:

• plt.plot() 是在“当前 Axes 上画图”

• ax.plot() 是在“指定 Axes 上画图”

前者强调方便,后者强调清晰。

六、图形修饰:让图真正可读

一张图并不是画出来就结束了。真正有用的图,通常还需要经过修饰,才能成为清晰的信息表达工具。

最常见的修饰包括以下几类。

1、标题

标题告诉读者这张图在展示什么内容。没有标题的图,往往需要读者自行猜测含义。

plt.title("Example Function")

或在面向对象写法中:

ax.set_title("Example Function")

2、坐标轴标签

横轴和纵轴标签用于说明变量含义。如果坐标轴没有标签,读者常常不知道横纵轴分别代表什么。

plt.ylabel("y")

对应的面向对象写法为:

ax.set_ylabel("y")

3、图例

当图中有多条曲线或多个图形对象时,图例非常重要。它用于说明不同颜色、不同线条分别对应什么含义。

plt.legend()

4、网格

网格不是必须的,但在很多图中,它可以帮助读者更容易估计位置和数值范围,特别是在教学、分析和报告场景中很有帮助。

plt.grid(True)

5、子图间距调整

当一个 Figure 中有多个子图时,标题、标签和刻度文字可能互相挤压。此时通常需要调整布局。

plt.tight_layout()

它的作用是自动优化子图之间的间距,减少重叠问题。

七、图形显示、保存与输出后端

绘图完成后,通常还需要处理两个问题:一是怎样显示图形,二是怎样保存图像。

1、显示图形

plt.show()

在普通 Python 脚本中,通常需要显式调用 show(),图形窗口才会弹出。

在某些交互式环境中,图形可能会自动显示,但理解 show() 的作用仍然很重要。

2、保存图像

plt.savefig("plot.png", dpi=300, bbox_inches="tight")

这里:

• "plot.png" 是输出文件名

• dpi=300 表示较高分辨率

• bbox_inches="tight" 表示尽量裁剪多余空白

一般来说,常见输出格式包括 PNG、PDF、SVG 等。

其中,PNG 适合普通图像输出,PDF 和 SVG 更适合高质量文档或矢量图场景。

在实际使用中,通常建议先保存,再显示。因为在某些环境中,如果先调用 show(),再调用 savefig(),可能会得到空白图像。

示例:

plt.show()

3、输出后端

在 Matplotlib 中,图形显示在屏幕上,或保存为 PNG、PDF、SVG 等文件,都依赖于后端(Backend)。可以把后端简单理解为:图形最终通过什么方式被显示或输出。

后端主要分为两类:

• 交互式后端支持图形显示与交互,例如在窗口中缩放、平移图形,也通常支持保存文件。

• 非交互式后端主要用于生成图片文件或文档图形,不提供交互式绘图窗口。

大多数情况下,Matplotlib 会自动选择合适的后端,因此不需要手动设置。

如果想查看当前使用的后端,可以写:

print(matplotlib.get_backend())

如果只需要保存图像,例如在没有图形界面的服务器上运行绘图程序,可以手动使用Agg后端。设置应在创建任何图形之前完成,通常放在导入matplotlib.pyplot之前:

Agg是基于 Anti-Grain Geometry 渲染引擎的非交互式后端,主要用于生成 PNG 等位图文件。使用它时,应通过savefig()保存结果,调用show()不会弹出交互式绘图窗口。示例中的plt.close()用于在保存后关闭图形并释放相关资源。

八、中文显示与简单全局配置

在中文环境下,Matplotlib 的一个常见问题是:图中中文可能无法正常显示,或者负号显示异常。这并不是绘图函数本身的问题,而通常与默认字体配置有关。

一种常见处理方式是使用 rcParams 设置全局参数:

这里:

•font.sans-serif用于指定无衬线字体列表。示例中的SimHei(黑体)需要已安装在当前系统中;如果没有,应改为本机已安装且支持中文的字体。

•axes.unicode_minus = False会让默认坐标轴刻度中的负号使用 ASCII 连字符-,用于规避部分字体缺少 Unicode 负号−时的显示问题;如果字体支持该字符,可以保留默认值True。

这类设置属于全局默认配置,会影响后续创建的图形。

除了字体外,还可以通过 rcParams 调整默认图像尺寸、分辨率、线宽等内容。例如:

plt.rcParams["figure.dpi"] = 120

一般来说,不必一次记住太多全局参数。只需知道:Matplotlib 不仅可以“在单张图上修改”,也可以通过全局配置改变后续图形的默认行为。

九、综合示例

下面给出一个简单的综合示例,将图形创建、绘图、修饰与输出串联起来。

小结

Matplotlib 用于把数据转化为可读图形。掌握 Figure 与 Axes 的关系,以及准备数据、绘图、修饰和输出的流程,就能完成基础可视化,并为人工智能实践中的数据探索、训练过程观察与结果展示打下基础。

“点赞有美意,赞赏是鼓励”

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
“性交易”上瘾!为图刺激,参加三届奥运的她,成了头牌应召女郎

“性交易”上瘾!为图刺激,参加三届奥运的她,成了头牌应召女郎

天马幸福的人生
2026-10-28 22:09:56
集体上调!工行、农行、建行、中行、交行、邮储银行,全都在列

集体上调!工行、农行、建行、中行、交行、邮储银行,全都在列

21世纪经济报道
2026-10-28 14:15:11
杨瀚森巨大危机:连续两场被弃用 还剩6天决定是否执行第3年选项

杨瀚森巨大危机:连续两场被弃用 还剩6天决定是否执行第3年选项

醉卧浮生
2026-10-28 14:21:55
扎克伯格把合伙人30%股份稀释到0.03%,展现资本世界的残酷

扎克伯格把合伙人30%股份稀释到0.03%,展现资本世界的残酷

三农老历
2026-10-28 02:45:29
又一个:塞尔维亚国营媒体RTV道歉!承认多年说谎

又一个:塞尔维亚国营媒体RTV道歉!承认多年说谎

项鹏飞
2026-10-28 19:16:21
卖家称四千元冰柜被退款未退货,实地探访发现买家仍在使用 买家回应:冰柜未达到承诺温度

卖家称四千元冰柜被退款未退货,实地探访发现买家仍在使用 买家回应:冰柜未达到承诺温度

红星新闻
2026-10-28 23:57:19
局势升级!美防长宣布反华言论,国防部出手,大批中国机构遭清除

局势升级!美防长宣布反华言论,国防部出手,大批中国机构遭清除

影孖看世界
2026-10-27 21:41:10
巴媒:维尼修斯主动提分手,称被对方压得喘不过气

巴媒:维尼修斯主动提分手,称被对方压得喘不过气

懂球帝
2026-10-28 09:09:06
随着帕尔马0-0,国米2-0,AC米兰2-4,意甲最新积分榜出炉

随着帕尔马0-0,国米2-0,AC米兰2-4,意甲最新积分榜出炉

侧身凌空斩
2026-10-29 03:27:48
随着巴西11-10,朝鲜6-0,U17女足世界杯8强已诞生4席

随着巴西11-10,朝鲜6-0,U17女足世界杯8强已诞生4席

侧身凌空斩
2026-10-29 04:28:35
某界汽车,月销量仅剩29辆!

某界汽车,月销量仅剩29辆!

电动内参
2026-10-29 01:32:33
皇马球员姆巴佩说了什么,公众义愤填膺?

皇马球员姆巴佩说了什么,公众义愤填膺?

芳华青年
2026-10-28 20:06:31
油价持续走高的深层恶果!不止费钱,正在拖垮全民消费

油价持续走高的深层恶果!不止费钱,正在拖垮全民消费

你在偷看谁
2026-10-28 21:00:28
WTT冠军赛大冷门!张本智和0-3惨败一轮游,不敌32岁法国老将

WTT冠军赛大冷门!张本智和0-3惨败一轮游,不敌32岁法国老将

全言作品
2026-10-29 02:58:55
不懂,为什么高校一方面在大量地招博士讲师,另一方面又设置了比较严苛的考核标准?两年三C一B,都要担心随时走人!

不懂,为什么高校一方面在大量地招博士讲师,另一方面又设置了比较严苛的考核标准?两年三C一B,都要担心随时走人!

学术眺望
2026-10-28 17:35:04
C罗荣膺历史最佳金球奖,皇马官网刊文报道

C罗荣膺历史最佳金球奖,皇马官网刊文报道

懂球帝
2026-10-29 03:51:40
价格大跳水!老登资产全线阴跌,年轻人不接盘了?网友:智商税

价格大跳水!老登资产全线阴跌,年轻人不接盘了?网友:智商税

品牌观察官
2026-10-28 17:31:43
以色列大选结果:内塔尼亚胡失去多数,反对派却无力取代他

以色列大选结果:内塔尼亚胡失去多数,反对派却无力取代他

以色列计划Pro
2026-10-28 13:02:54
韩国外交部长赵显公开表示:如果局势进一步恶化,不排除韩国与乌克兰断绝外交关系的可能

韩国外交部长赵显公开表示:如果局势进一步恶化,不排除韩国与乌克兰断绝外交关系的可能

吉刻新闻
2026-10-28 23:16:45
边境对峙持续3个月,现场画面传来,解放军迎着印军木棍拉起横幅

边境对峙持续3个月,现场画面传来,解放军迎着印军木棍拉起横幅

张斌说
2026-10-28 20:35:05
2026-10-29 07:07:00
MediaTea
MediaTea
专业的数字媒体、新媒体技术
2259文章数 85关注度
往期回顾 全部

科技要闻

宇树科技前三季净利暴增270%

头条要闻

美联储宣布维持利率不变

头条要闻

美联储宣布维持利率不变

体育要闻

0胜4负与篮网国王一桌 热火字母哥赌错了?

娱乐要闻

巾帼不让须眉!章子怡拿下重磅荣誉

财经要闻

iPhone Duo七年等来一场吐槽大会

汽车要闻

首销期权益价23.98万起 2026款理想i6上市

态度原创

艺术
家居
游戏
亲子
本地

艺术要闻

23张人性与爱的照片,第1张就让人破防了……

家居要闻

2026建博会(广州) 公装联探展交流活动

《影之刃零》即将发售 PC版支持DLSS 4.5与路径追踪

亲子要闻

13岁长到1米95,全网都在求食谱,我想劝大家先冷静

本地新闻

十月奔赴迪庆,解锁梅里日照金山

无障碍浏览 进入关怀版