Python matplotlib plot函数绘制基础折线图步骤

小鹿同学
小鹿同学
发布时间:2026-10-24 | 10人浏览过
原创

假设你正在记录某台服务器在连续 7 个小时内的响应延迟,或者统计连续一周内每日的平均气温,面对一串单纯的数字列表,数据波动的走势很难被一眼捕捉。折线图通过在二维坐标系中把有序数据点逐一连接成线,能直观反映出数值随自变量变化的升降趋势。在 Python 数据可视化生态中,Matplotlib 库的 pyplot.plot() 是绘制这类图表最核心的基础函数。本文将按照实际开发流程,完整拆解从准备环境、配置坐标数据、调用函数、图表标注修饰到保存输出的全过程。

Python matplotlib plot函数绘制基础折线图步骤
图 1:Matplotlib 基础折线图构建的标准顺序

步骤一:安装与导入模块

在使用 Matplotlib 之前,需确保运行环境中已安装该包。在命令行终端中执行以下安装命令:

pip install matplotlib

在 Python 代码文件或交互式笔记本中,一般不直接导入整个 matplotlib 顶层包,而是引入其实用接口模块 matplotlib.pyplot,并约定俗成地将其简写为 plt:

import matplotlib.pyplot as plt

pyplot 提供了一个类似 MATLAB 的状态机接口,它会在后台自动追踪当前的画布(Figure)与绘图区域(Axes),使得绝大多数基础绘图任务可以通过直接调用顶级函数完成。

步骤二:准备自变量与因变量数据

折线图本质上是离散二维点集的连线。绘制前需要准备两个序列:分别对应横坐标(X 轴)与纵坐标(Y 轴)。这两个序列可以是 Python 的原生 list、tuple,也可以是 numpy.ndarray 或 pandas.Series。

以一周 7 天的气温记录为例:

# 横轴:周一至周日(用数字 1 到 7 表示)
x_data = [1, 2, 3, 4, 5, 6, 7]

# 纵轴:每天对应的摄氏度读数
y_data = [18.2, 19.5, 22.0, 21.4, 24.8, 26.1, 23.5]

注意: x_data 与 y_data 的元素个数必须严格相等。如果横轴包含 7 个刻度点,而纵轴只有 6 个数值,Matplotlib 在运行时会直接抛出 ValueError: x and y must have same first dimension。

Python matplotlib plot函数绘制基础折线图步骤
图 2:连续数据点在二维坐标系中的连接与定位过程

步骤三:调用 plot 函数与核心样式配置

最精简的调用方式只需要将数据传入 plt.plot():

plt.plot(x_data, y_data)

若只传入一个序列,例如 plt.plot(y_data),Matplotlib 会默认将其作为 Y 轴数值,并自动生成从 0 开始的连续整数索引 [0, 1, 2, ..., N-1] 作为 X 轴刻度。

为了让图表更具可读性,通常需要通过关键字参数自定义线条的颜色、宽度、标记样式及图例标签:

参数名 常用取值示例 作用说明
color '#1f77b4', 'blue', 'r' 指定折线的颜色,支持十六进制色值、RGB 元组及标准颜色名称。
linestyle '-' (实线), '--' (虚线), ':' (点线) 定义折线的线性外观。
linewidth 1.5, 2.0, 3 折线的像素粗细程度。
marker 'o' (圆圈), 's' (方块), '^' (三角) 在每个具体数据点处绘制的形状标记,强化采样点位置。
markersize 5, 8 数据点标记的大小。
label '日均气温' 当前折线在图例(Legend)中显示的名称。
Python matplotlib plot函数绘制基础折线图步骤
图 3:plot() 参数对线条、采样标记及图例的表现控制

步骤四:完善图表标注与中文字体支持

仅有一根裸折线的图表缺乏必要的信息量,读者无法判断横纵轴的量纲与单位。因此,需要配合调用图表修饰函数补全辅助说明:

  • plt.title('图表大标题'):定义顶部主标题。
  • plt.xlabel('横坐标名称') 与 plt.ylabel('纵坐标名称'):明确各坐标轴的物理量或统计维度。
  • plt.grid(True, linestyle='--', alpha=0.5):开启背景参考网格,方便肉眼快速对齐坐标。
  • plt.legend():渲染前面在 plot() 中由 label 指定的图例。

中文字体与负号乱码的解决方式

Matplotlib 默认采用 DejaVu Sans 等西文字体。若标题或轴标签中直接输入中文,图表上的文字往往会显示为空心方块(乱码豆腐块),若数值存在负数也会引发负号显示异常。在绘图代码最前部加入以下全局配置即可妥善解决:

# 指定支持中文的系统字体(Windows 可用 'SimHei',macOS 可用 'PingFang SC' 或 'Arial Unicode MS')
plt.rcParams['font.sans-serif'] = ['SimHei', 'PingFang SC', 'Microsoft YaHei']

# 解决保存图像时负号 '-' 被显示为方块的问题
plt.rcParams['axes.unicode_minus'] = False

步骤五:渲染展示与保存为本地图片

完成绘制与标注后,有两种主要方式输出图表:

  1. 屏幕交互式弹窗展示: 调用 plt.show()。Matplotlib 会启动 GUI 窗口渲染图表,支持放大、缩放、平移等交互操作。
  2. 持久化保存到文件: 调用 plt.savefig('output.png', dpi=300, bbox_inches='tight')。支持保存为 PNG、JPG、SVG 或 PDF 格式。其中 dpi=300 可保证印刷或高分屏下的清晰度,bbox_inches='tight' 会自动裁剪画布周边的无用留白。

完整可执行代码示例

下面是一份包含上述所有步骤的完整脚本,可以直接复制运行:

import matplotlib.pyplot as plt

# 1. 配置中文字体与正常显示负号
plt.rcParams['font.sans-serif'] = ['SimHei', 'PingFang SC', 'Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False

# 2. 准备横坐标(星期几)与纵坐标(摄氏度)
days = ['周一', '周二', '周三', '周四', '周五', '周六', '周日']
temperatures = [18.2, 19.5, 22.0, 21.4, 24.8, 26.1, 23.5]

# 3. 创建画布并设置大小(宽 8 英寸,高 4.5 英寸)
plt.figure(figsize=(8, 4.5))

# 4. 调用 plot 核心函数绘制折线
plt.plot(
    days,
    temperatures,
    color='#1f77b4',       # 折线颜色
    linestyle='-',          # 实线
    linewidth=2,            # 线宽 2 像素
    marker='o',             # 数据点为圆圈
    markersize=6,           # 标记大小
    label='日间平均气温'    # 图例标签
)

# 5. 添加标题、轴标签、网格与图例
plt.title('某地区一周气温变化趋势', fontsize=14, pad=12)
plt.xlabel('日期', fontsize=11)
plt.ylabel('温度 (°C)', fontsize=11)
plt.grid(True, linestyle='--', alpha=0.6)
plt.legend(loc='upper left')

# 6. 保存图片至本地(必须在 show() 之前调用)
plt.savefig('temperature_trend.png', dpi=300, bbox_inches='tight')

# 7. 屏幕显示
plt.show()
Python matplotlib plot函数绘制基础折线图步骤
图 4:折线图开发关键操作与常见错误对照清单

关键注意事项与排错指南

在实际编写与运行折线图代码时,以下几个细节需要格外注意:

  • savefig() 必须置于 show() 之前: plt.show() 在关闭弹出的图形窗口后,会默认清空当前 figure 的内容。如果把 plt.savefig() 写在 plt.show() 之后,保存出来的图片将是一张纯白图像。
  • 循环批量出图时的内存释放: 如果在循环中批量绘制成百上千张折线图并保存,每次绘图后必须调用 plt.close()。若不显式关闭,Matplotlib 会一直保留每个 Figure 对象的内存引用,最终可能引发系统的内存溢出(OOM)。
  • 数据类型转换: 如果从 CSV 文件或数据库中读取的数据是字符串形式(例如 '18.2' 而非浮点数 18.2),Matplotlib 会将其视为离散分类标签处理,导致 Y 轴刻度无法按照数值大小顺序排序。在绘图前应使用 float()、int() 或 pd.to_numeric() 进行显式类型转换。

本站声明

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

Python 相关产品和应用

全部下载

专题列表