Python matplotlib plot函数绘制基础折线图步骤
假设你正在记录某台服务器在连续 7 个小时内的响应延迟,或者统计连续一周内每日的平均气温,面对一串单纯的数字列表,数据波动的走势很难被一眼捕捉。折线图通过在二维坐标系中把有序数据点逐一连接成线,能直观反映出数值随自变量变化的升降趋势。在 Python 数据可视化生态中,Matplotlib 库的 pyplot.plot() 是绘制这类图表最核心的基础函数。本文将按照实际开发流程,完整拆解从准备环境、配置坐标数据、调用函数、图表标注修饰到保存输出的全过程。
步骤一:安装与导入模块
在使用 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。
步骤三:调用 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)中显示的名称。 |
步骤四:完善图表标注与中文字体支持
仅有一根裸折线的图表缺乏必要的信息量,读者无法判断横纵轴的量纲与单位。因此,需要配合调用图表修饰函数补全辅助说明:
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
步骤五:渲染展示与保存为本地图片
完成绘制与标注后,有两种主要方式输出图表:
- 屏幕交互式弹窗展示: 调用
plt.show()。Matplotlib 会启动 GUI 窗口渲染图表,支持放大、缩放、平移等交互操作。 - 持久化保存到文件: 调用
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()
关键注意事项与排错指南
在实际编写与运行折线图代码时,以下几个细节需要格外注意:
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()进行显式类型转换。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









