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 迁移
可维护性 高,逻辑清晰,不易出错 低,多子图易混淆
官方推荐 官方推荐标准写法 仅用于快速绘图
相关推荐
RainCity1 天前
Java Swing 自定义组件库分享(十二)
java·笔记·后端
LinXunFeng8 天前
Obsidian - 使用 Share Note 分享笔记并自部署
前端·笔记·github
通信小呆呆13 天前
当算法有了“五感”:多模态数据融合如何向人体感官协同学习?
人工智能·学习·算法·机器学习·机器人
H__Rick13 天前
自动对焦学习-3
人工智能·学习·计算机视觉
Daisy Lee13 天前
量化学习-第1章-什么是量化金融
学习·金融·datawhale
Alsn8613 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
YM52e13 天前
买菜计算器小应用 - HarmonyOS ArkUI 开发实战-PC版本
学习·华为·harmonyos·鸿蒙·鸿蒙系统
小雨下雨的雨13 天前
HarmonyOS ArkUI训练营入门-组件掌握系列-Animation 动画效果实现-PC版本
学习·华为·harmonyos·鸿蒙
闪闪发亮的小星星13 天前
高斯光以及高斯光公式解释
笔记
cqbzcsq13 天前
CellFlow虚拟细胞论文阅读
论文阅读·人工智能·笔记·学习·生物信息