Python画图入门:用matplotlib绘制第一张折线图

凌晨两点半
凌晨两点半
发布时间:2026-11-11 | 6人浏览过
原创

面向Python初学者的matplotlib实用折线图绘制教程。从环境安装、极简示例、核心对象结构解析,到坐标轴配置、图例网格添加以及中文乱码等常见问题排查,带你一步步掌握第一张折线图的标准绘制流程。

折线图是数据分析中最常用、最直观的图表类型之一。本文以 Python 生态中最经典的第三方绘图库 matplotlib 为核心,从环境安装开始,带你用最精简的代码绘制出第一张折线图,并逐行掌握核心语法、坐标轴修饰、网格图例添加以及中文乱码等常见问题的排查方法。
Python画图入门:用matplotlib绘制第一张折线图
图 0:Matplotlib 折线图从原始数据传入、引擎处理到视图渲染的端到端管道

一、基础准备:认识 matplotlib 与环境安装

matplotlib 是 Python 科学计算与数据分析领域中使用最广泛的绘图工具包。在日常开发中,我们通常不会直接操作其底层的复杂底层接口,而是使用它提供的子模块 matplotlib.pyplot。该模块封装了大量高级绘图函数,其使用风格与 MATLAB 类似,非常契合快速数据探索与可视化分析。

在开始写绘图代码之前,需确保开发环境中已正确安装该库。打开系统的终端(macOS/Linux 为 Terminal,Windows 为 PowerShell 或命令提示符 CMD),执行以下命令进行安装:

pip install matplotlib

如果你使用的是 Jupyter Notebook 或 Anaconda 虚拟环境,可以直接在代码单元格中输入 !pip install matplotlib 并运行。安装完成后,可以通过一段极简的 Python 导入语句来验证是否安装成功:

import matplotlib
import matplotlib.pyplot as plt

print(matplotlib.__version__)

若终端输出了类似 3.8.0 的版本号且没有抛出 ModuleNotFoundError 错误,说明安装无误,可以进入后续代码编写。

Python画图入门:用matplotlib绘制第一张折线图
图 1:从环境配置到视图呈现的标准四步操作流程

二、核心步骤:用 5 行代码绘制第一张折线图

学习绘图最有效的方式是从最小可运行代码入手。新建一个名为 first_plot.py 的文件,输入以下 5 行核心代码并保存:

import matplotlib.pyplot as plt

# 准备横纵轴数据(例如 5 个采样点的序号与数值)
x = [1, 2, 3, 4, 5]
y = [2, 5, 4, 9, 7]

# 执行折线图绘制与渲染呈现
plt.plot(x, y)
plt.show()

在终端中运行该脚本:

python first_plot.py

执行后,你的屏幕上会弹出一个独立的 GUI 绘图窗口。窗口中央绘制了一条连续的蓝色折线,折线的转折点分别对应于 (1, 2)、(2, 5)、(3, 4)、(4, 9) 和 (5, 7) 这五个离散点。

逐行原理解释

  • import matplotlib.pyplot as plt:导入 pyplot 并约定俗成地重命名为 plt。以后所有的绘图命令几乎都以 plt. 开头。
  • x = [...] 与 y = [...]:分别定义折线图的横轴(自变量)和纵轴(因变量)。在 matplotlib 中,只要是一维可迭代对象(如 Python 原生 list、元组、NumPy 数组或 Pandas Series),都可以直接传入。
  • plt.plot(x, y):核心绘图函数。它做的事情是:按照索引顺序将每一个 (x[i], y[i]) 坐标点定位在二维平面上,然后使用直线段将相邻的点依次首尾连接。如果不指定其他参数,它会自动计算横纵轴的取值范围,并使用默认样式(默认纯实线、默认蓝色)绘制。
  • plt.show():将内存中构建好的图表真正渲染到屏幕上。如果忽略此行,脚本在后台执行完计算后便会直接退出,不会展示任何可视化图形。

三、核心对象解剖:Figure 与 Axes 的层级关系

很多初学者在使用 matplotlib 一段时间后,常常会感到困惑:有时候看到别人用 plt.title(),有时候又看到别人写 ax.set_title(),这两者究竟有什么区别?

理解这一点的关键在于搞清楚 matplotlib 的内部层级架构。在 matplotlib 的世界里,图表是由不同的容器层层嵌套构建而成的:

  • Figure(画布):整个可视化的顶级容器,相当于画家的画板。它包含了窗口的大小(figsize)、背景色、分辨率(DPI)以及上面所有的子图和文字。
  • Axes(坐标系/子图):真正用于绘图的物理区域,相当于画纸上的某个具体区域。折线、柱子、散点等所有图元(Artist)都绘制在 Axes 之上。一个 Figure 可以只包含一个 Axes,也可以划分成网格包含多个 Axes。
  • Axis(坐标轴):位于 Axes 内部的具体维度控制器,分为 XAxis 和 YAxis。它负责刻度线(Ticks)、刻度数值标签(TickLabels)以及轴标题(Label)的计算与放置。
  • Line2D(图元线条):由 plot() 函数生成的具体几何线条,拥有颜色、线宽、线型、标记点等视觉属性。
Python画图入门:用matplotlib绘制第一张折线图
图 2:Matplotlib 的 Figure 画布与 Axes 坐标系核心容器架构

前面我们在第二节使用的是 plt.plot(),这是 pyplot 快捷接口(它会在后台自动为你创建当前的 Figure 和 Axes);而在规范的工程代码中,更推荐使用 面向对象接口(Object-Oriented API),即:

# 推荐写法:显式创建画布 figure 与坐标系 ax
fig, ax = plt.subplots(figsize=(8, 4.5))

ax.plot(x, y)
plt.show()

这种写法将画布(fig)和坐标系(ax)明确分开,当你需要在一张图里画多个并列的子图,或者对坐标轴进行精细调整时,逻辑会清晰得多。

四、进阶美化:为第一张折线图赋予完整语义

仅仅画出一条没有标题、没有轴名称的折线,在实际业务和科研报告中是无法被他人看懂的。一张合格的折线图,必须具备清晰的 标题、坐标轴含义及单位、数据图例 以及用于辅助肉眼对齐数值的 参考网格。

Python画图入门:用matplotlib绘制第一张折线图
图 3:API 参数配置与实际图表视觉呈现一一映射示意

下面是一个包含完整语义标注、线条美化及保存功能的完整示例代码:

import matplotlib.pyplot as plt

# 解决中文字体显示问题(Windows 优先选择 SimHei,macOS 优先选择 PingFang HK 或 Arial Unicode MS)
plt.rcParams['font.sans-serif'] = ['PingFang SC', 'Microsoft YaHei', 'SimHei', 'sans-serif']
plt.rcParams['axes.unicode_minus'] = False  # 正常显示负号

# 1. 准备数据
days = ['周一', '周二', '周三', '周四', '周五']
temperatures = [12, 18, 15, 26, 21]

# 2. 创建画布与坐标系
fig, ax = plt.subplots(figsize=(7, 4))

# 3. 绘制带有颜色、虚线以及标记点的折线
ax.plot(days, temperatures, 
        color='#345E82',       # 线条颜色(支持 16 进制颜色码)
        linestyle='--',         # 线型:虚线
        linewidth=2,           # 线条粗细
        marker='o',            # 数据拐点标记:圆形
        markersize=6,          # 标记点大小
        markerfacecolor='#AD8060', # 标记点内部填充色
        label='实测温度')       # 用于图例的文本标签

# 4. 补充图表语义信息
ax.set_title('工作日白天最高气温趋势', fontsize=14, pad=12)
ax.set_xlabel('时间', fontsize=11)
ax.set_ylabel('温度 (°C)', fontsize=11)

# 5. 打开虚线辅助网格
ax.grid(True, linestyle=':', alpha=0.6)

# 6. 显示图例(默认根据 label 自动生成)
ax.legend(loc='upper left')

# 7. 保存图片并展示(注意:保存必须在 show() 之前)
plt.savefig('weekly_temp.png', dpi=300, bbox_inches='tight')
plt.show()
参数名 常见取值示例 实际作用说明
color '#345E82', 'red', 'blue' 定义折线的颜色,支持标准英文颜色名或十六进制 RGB 码。
linestyle '-'(实线), '--'(虚线), ':'(点线), '-.'(点划线) 控制线条的形态,便于在多条折线并存时通过线型区分。
marker 'o'(圆点), 's'(方块), '^'(三角形), '*'(星号) 在每个具体的数据坐标点上绘制符号标记,凸显关键离散数据。
label '2026年数据' 为当前线条定义图例名称,配合 ax.legend() 一起使用。

五、入门避坑:初学折线图常见问题与排查

初学者在刚刚接触 matplotlib 时,往往会遇到几个非常典型的问题。通过以下针对性的排查清单,可以快速定位并修复:

1. 中文字符显示为白色方框或乱码

现象:图表标题或坐标轴上的中文汉字变成了方框(□□)或问号,并在终端输出 Glyph missing from current font 警告。
原因:matplotlib 默认使用的无衬线字体是 DejaVu Sans,该英文字体内置字符集并不包含中文字符。
解决方法:在脚本头部配置当前操作系统中已安装的中文字体族:

# 跨平台中文设置配置
plt.rcParams['font.sans-serif'] = ['PingFang SC', 'Microsoft YaHei', 'SimHei', 'sans-serif']
plt.rcParams['axes.unicode_minus'] = False  # 解决坐标轴负号 '-' 显示为方块的问题

2. 保存的图片文件是一张全白空白图

现象:调用了 plt.savefig('output.png'),打开生成的图片后发现整个画面全是空白。
原因:把 plt.savefig() 写在了 plt.show() 之后。在调用 plt.show() 关闭交互窗口后,matplotlib 内部会自动清空当前活动的 Figure 画布。因此后续执行的 savefig() 实际上保存了一块已被清空的空画布。
解决方法:始终在 plt.show() 之前调用 plt.savefig();或者使用面向对象句柄 fig.savefig('output.png') 保存。

3. 报错:x and y must have same first dimension

现象:控制台抛出 ValueError: x and y must have same first dimension, but have shapes (4,) and (5,)。
原因:传入 plot(x, y) 的 x 列表与 y 列表长度不相等。每个数据点必须具备一个唯一的 x 与 y 对应。
解决方法:在调用前检查 len(x) == len(y)。

Python画图入门:用matplotlib绘制第一张折线图
图 4:折线图开发四类高频故障根因定位与修复策略矩阵

六、总结与实践建议

绘制第一张折线图并不复杂,核心脉络可以总结为四个词:导包、列数、连线、修饰。

  1. 建立良好习惯:在实际项目中,优先采用 fig, ax = plt.subplots() 的面向对象语法,而不是过度依赖全局 plt 隐式状态机。这样能为以后绘制多子图、双坐标轴或复杂排版打下坚实基础。
  2. 控制视觉复杂度:折线图的核心目的是展现“变化趋势”。折线颜色尽量与背景产生明确对比,单张图内同向比较的折线尽量不超过 5 条,必要时配合 marker 和虚线等线型加以辅助区分。
  3. 规范保存流程:在自动化脚本或数据处理管道中,结合 matplotlib.use('Agg') 和 plt.savefig('output.png', dpi=300, bbox_inches='tight'),可以稳定输出印刷级的高清矢量或位图文件。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表