Python Matplotlib 绘制 CSV 数据图表
一段使用 matplotlib 库的 Python 脚本,能让你快速从 CSV 文件生成图表。本例使用名为 LiLog.csv 的文件,包含行号、光照强度(Lx)、温度、时间、日期和 Unix 时间戳等列。图表以时间戳(第 6 列)为 X 轴,光照强度(第 2 列)为 Y 轴。
你需要 Python 3+、matplotlib 和内置的 csv 模块。检查 Python 解释器位置用 where python,建议使用干净安装,避免 Cygwin 或 Inkscape 的捆绑包。
安装依赖:
pip install matplotlib numpy
基础 2D 折线图脚本
这段代码加载数据、解析 CSV 并绘制折线图:
import matplotlib.pyplot as plt
import csv
X = []
Y = []
with open('LiLog.csv', 'r') as datafile:
plotting = csv.reader(datafile, delimiter=',') # 本例使用逗号分隔
for ROWS in plotting:
X.append(float(ROWS[5]))
Y.append(float(ROWS[1]))
plt.plot(X, Y)
plt.title('基于 CSV 的折线图')
plt.xlabel('X')
plt.ylabel('Y')
plt.show()
X 和 Y 列表填充指定列的浮点数值。csv.reader 处理分隔符(本例为逗号——检查你的文件)。plt.plot 绘制折线,show() 打开显示窗口。
高级图表:阈值线、标注和网格
添加水平阈值线(63 Lx)、网格、图例和旋转标签:
import matplotlib.pyplot as plt
import csv
X = []
Y = []
with open('LiLog.csv', 'r') as datafile:
plotting = csv.reader(datafile, delimiter=',')
for ROWS in plotting:
X.append(float(ROWS[5]))
Y.append(float(ROWS[1]))
threshold = 63.0
T = [threshold] * len(Y)
plt.plot(X, Y)
plt.plot(X, T)
plt.title('光照变化')
plt.xlabel('时间,[s]')
plt.ylabel('光照强度, [Lx]')
plt.grid()
plt.xticks(rotation=-90)
plt.legend(['光照强度', f'阈值 {threshold} Lx'])
plt.show()
检查数组长度:print(len(X), len(Y))。数据类型为 list[float]。交互功能包括通过 matplotlib 窗口工具栏缩放和平移。
依赖与安装
列出已安装包:pip freeze。典型的 matplotlib 输出:
- contourpy==1.3.3
- cycler==0.12.1
- fonttools==4.62.1
- kiwisolver==1.5.0
- matplotlib==3.10.8
- numpy==2.4.4
单独安装:pip install matplotlib numpy。
为什么 Matplotlib 是数据可视化的利器
- 免费开源。
- 交互式:支持缩放、保存为 PNG、自定义坐标轴和网格。
- 跨平台:Windows、Linux(需 GUI)。
- 用 PyInstaller 打包成 EXE,便于分享。
- 体积小巧:只需一个 .py 文件。
- 无头自动化:命令行运行,无需图形界面。
局限性
- 实时绘图(如 COM/TCP 数据流)需线程或 FuncAnimation。
- 大数据集(>100 万点)可能变慢——用 numpy 数组优化。
实用技巧
- 用 numpy 处理数组:
X = np.array(X)加速绘图。 - CSV 分隔符:尝试
delimiter=','或';',复杂文件切换到 pandas。 - 坐标轴标签:
plt.xlabel、plt.ylabel带单位(如 s、Lx)。 - 图例:
plt.legend(['数据', '阈值'])用于多条线。 - 网格:
plt.grid()提升可读性。
Python + Matplotlib 是快速可视化 CSV 实验数据的首选组合。特别适合传感器日志分析,如光照随时间变化。
— Editorial Team
暂无评论。