Matplotlib实践学习笔记

第二章 艺术画笔见乾坤

一.Matplotlib的概念

Matplotlib 是 Python 生态中最核心、最基础的 2D 数据可视化库,被称为 Python 数据可视化的 "泰斗"。

  • 核心能力:生成出版级质量的静态、动态、交互式图表,支持折线图、柱状图、散点图、饼图等几乎所有常见图表类型。
  • 应用场景:可用于 Python 脚本、Jupyter Notebook、Web 应用、GUI 工具等,是 pandas、seaborn 等高级可视化库的底层基础(这些库本质是对 Matplotlib 的封装)。
  • 核心优势:高度可定制化,能精准控制图表的每一个细节(线条、颜色、标签、字体等),是数据分析师、科研人员的必备工具。

二、一个最简单的绘图例子

Matplotlib 绘图的核心是两个层级:

  1. Figure(画布):整个图表的最外层容器,相当于我们画图的 "纸",可以是窗口、Jupyter 单元格等。
  2. Axes(坐标轴 / 子图):画在 Figure 上的、带坐标系的绘图区域,一个 Figure 可以包含 1 个或多个 Axes。

简单来说:Figure 是画布,Axes 是画布上的画纸,所有的图表元素(线条、标签、刻度)都画在 Axes 上。

1.面向对象式

这是 Matplotlib 官方推荐的标准写法,适合复杂图表和精细化控制

复制代码
# 1. 导入依赖库
import matplotlib.pyplot as plt
import numpy as np

# 2. 创建画布(figure)和坐标轴(axes)
fig, ax = plt.subplots()  # 默认创建1个Axes,也可指定行列数,如 plt.subplots(2,1) 创建2行1列的子图

# 3. 在Axes上绘制折线图
# plot(横坐标列表, 纵坐标列表)
ax.plot([1, 2, 3, 4], [1, 4, 2, 3])

# 4. 显示图表(Jupyter中可省略,脚本中必须加)
plt.show()

运行效果

2.pyplot 式

这种写法模仿 MATLAB 的语法,自动创建 Axes,适合快速绘图、简单场景。

复制代码
# 导入依赖库
import matplotlib.pyplot as plt

# 直接调用 plt.plot() 绘图,Matplotlib 自动创建 Figure 和 Axes
plt.plot([1, 2, 3, 4], [1, 4, 2, 3])

# 显示图表
plt.show()

运行效果

三、Figure 的组成

1.Matplotlib 的图表是一个层级化的容器结构,从顶层到底层依次为:

层级 名称 核心作用 对应操作
顶层 Figure(画布) 整个图表的最外层容器,容纳所有绘图元素 plt.figure() / fig = plt.figure()
核心 Axes(子图 / 坐标轴区域) Matplotlib 的核心,一个 Figure 可包含 1 个或多个 Axes,是真正的绘图区域 fig.subplots() / ax = plt.subplots()
从属 Axis(坐标轴) Axes 的下属层级,处理坐标轴、网格等相关元素 ax.xaxis / ax.yaxis
底层 Tick(刻度) Axis 的下属层级,处理刻度、刻度标签等细节 ax.xaxis.set_major_locator()

2.完整图表的所有元素

1. 基础容器类

  • Figure:最外层画布,控制图表大小、背景色等
  • Axes:子图区域,所有绘图操作的核心载体
  • Spine(坐标轴脊线) :包围 Axes 的四条边框,可隐藏、修改样式(ax.spines

2. 坐标轴与刻度类

  • Axis(x/y 轴):坐标轴对象,控制轴的范围、样式
  • Major tick(主刻度) :主刻度线,对应大的数值标记(ax.yaxis.set_major_locator
  • Minor tick(次刻度) :次刻度线,用于更精细的刻度划分(ax.yaxis.set_minor_locator
  • Major/Minor tick label(刻度标签) :刻度上的文字,可自定义格式(set_major_formatter
  • xlabel /ylabel(坐标轴标签) :坐标轴的说明文字(ax.set_xlabel() / ax.set_ylabel()

3. 数据与装饰类

  • Line(线条) :折线图的线条,通过 ax.plot() 绘制
  • Markers(标记) :散点图的标记点,通过 ax.scatter() 绘制
  • Title(标题) :图表的标题(ax.set_title()
  • Grid(网格线) :背景网格,辅助读数(ax.grid()
  • Legend(图例) :标注不同数据系列的含义(ax.legend()

四、两种核心绘图接口详解

Matplotlib 提供了两种完全等效的绘图方式,适用于不同场景:

1. 面向对象式(OO 模式)

核心逻辑 :显式创建 figureaxes 对象,所有操作都通过对象方法完成,逻辑清晰、可维护性高。

复制代码
import matplotlib.pyplot as plt
import numpy as np

# 1. 生成数据:0到2之间取100个等间距点
x = np.linspace(0, 2, 100)

# 2. 显式创建figure和axes
fig, ax = plt.subplots()

# 3. 在axes上绘制三条曲线
ax.plot(x, x, label='linear')       # 一次函数 y=x
ax.plot(x, x**2, label='quadratic') # 二次函数 y=x²
ax.plot(x, x**3, label='cubic')     # 三次函数 y=x³

# 4. 配置图表元素
ax.set_xlabel('x label')  # x轴标签
ax.set_ylabel('y label')  # y轴标签
ax.set_title("Simple Plot") # 图表标题
ax.legend()  # 显示图例

# 5. 显示图表(脚本中必须,Jupyter中可省略)
plt.show()
运行效果
  • 优势
    • 逻辑清晰,每个操作都明确作用于哪个 axes,多子图场景下不会混淆
    • 高度可定制,适合复杂图表、科研绘图、生产环境
    • 符合 Python 面向对象的编程思想,可维护性强

2. pyplot 式(MATLAB 风格)

核心逻辑 :依赖 pyplot 自动创建 figureaxes,所有操作都通过 plt.xxx() 完成,代码极简。

复制代码
import matplotlib.pyplot as plt
import numpy as np

# 1. 生成数据
x = np.linspace(0, 2, 100)

# 2. 直接调用plt.plot绘图,自动创建figure和axes
plt.plot(x, x, label='linear')
plt.plot(x, x**2, label='quadratic')
plt.plot(x, x**3, label='cubic')

# 3. 配置图表元素
plt.xlabel('x label')
plt.ylabel('y label')
plt.title("Simple Plot")
plt.legend()

# 4. 显示图表
plt.show()
运行效果
  • 优势
    • 代码极简,一行绘图,适合快速探索数据、简单可视化
    • 语法和 MATLAB 高度相似,MATLAB 用户上手无压力
  • 劣势
    • 多子图场景下容易混淆当前操作的 axes,不适合复杂定制
    • 代码可维护性差,大型项目不推荐

3.两种接口的核心对比

对比维度 面向对象式(OO 模式) pyplot 式(MATLAB 风格)
创建方式 显式创建 fig, ax = plt.subplots() 隐式自动创建,无需手动声明
操作方式 所有操作通过 ax.xxx() 完成 所有操作通过 plt.xxx() 完成
代码复杂度 稍多,需手动创建对象 极简,一行绘图
灵活性 极高,支持多子图、精细化控制 一般,简单场景够用
适用场景 复杂图表、科研绘图、生产环境 快速探索、简单可视化、MATLAB 迁移
可维护性 高,逻辑清晰,不易出错 低,多子图易混淆
官方推荐 官方推荐标准写法 仅用于快速绘图
相关推荐
chase。3 小时前
【学习笔记】AGILE:把人形机器人强化学习从“玄学”变成“工程学”
笔记·学习·敏捷流程
久菜盒子工作室3 小时前
高等教育学|第一章高等教育概述
经验分享·笔记·课程设计
bu_shuo4 小时前
git练习学习网站【中文网站】
git·学习
tq10864 小时前
语言流形与思维共生:中西认知图景的差异与交融
笔记
YuanDaima20484 小时前
基于 LangChain 1.0 的检索增强生成(RAG)实战
人工智能·笔记·python·langchain·个人开发·langgraph
EnglishJun5 小时前
ARM嵌入式学习(十四)--- IMX6ULL的I2C通信实现
arm开发·学习
_李小白5 小时前
【OSG学习笔记】Day 31: 渲染到纹理(RTT)
笔记·数码相机·学习
嵌入式小企鹅5 小时前
蓝牙学习系列(七):BLE GATT 数据模型详解
学习·蓝牙·ble·蓝牙协议栈·蓝牙开发·gatt
arvin_xiaoting6 小时前
OpenClaw学习总结_III_自动化系统_3:CronJobs详解
数据库·学习·自动化