Python读取CSV绘图求助:树莓派传感器电压数据可视化问题
问题排查与解决步骤
1. 核心问题:文件打开模式错误
读取CSV时如果误用w/w+模式,会直接清空文件内容,必须用**只读模式r**打开:
# 错误示例(会清空文件) with open("sensor_data.csv", "w") as f: data = f.read() # 正确读取方式 with open("sensor_data.csv", "r") as f: data = f.readlines()
2. 确保写入操作完成
写入CSV时必须保证数据真正写入磁盘,推荐用with语句自动管理文件关闭(避免缓冲区数据未写入):
import csv def save_voltage(voltage): # 用a模式追加数据,不会覆盖已有内容 with open("sensor_data.csv", "a", newline="") as f: writer = csv.writer(f) writer.writerow([voltage])
3. GUI触发读取+绘图完整示例
结合guizero和matplotlib实现按钮触发绘图:
from guizero import App, PushButton import csv import matplotlib.pyplot as plt def plot_voltage_curve(): voltages = [] try: with open("sensor_data.csv", "r") as f: reader = csv.reader(f) for row in reader: # 跳过空行,转换为数值 if row: voltages.append(float(row[0])) if not voltages: print("CSV文件为空或无有效数据") return # 绘制曲线 plt.figure(figsize=(8,4)) plt.plot(voltages, label="传感器电压") plt.ylabel("电压(V)") plt.xlabel("采样次数") plt.title("传感器电压变化") plt.legend() plt.show() except FileNotFoundError: print("请先执行数据记录,CSV文件不存在") except ValueError: print("CSV文件中存在非数值数据,请检查格式") # 初始化GUI app = App(title="传感器数据可视化") plot_btn = PushButton(app, text="绘制电压曲线", command=plot_voltage_curve) app.display()
4. 额外注意事项
- 确认CSV文件路径正确:如果不在脚本同目录,使用绝对路径(比如
/home/pi/sensor_data.csv) - 写入时添加
newline="",避免跨系统换行符问题 - 测试前手动打开CSV文件,确认数据已正确写入
内容的提问来源于stack exchange,提问作者Antoine Legrand
相关产品推荐
相关产品推荐

