如何读取温湿度日志TXT并提取数据用Numpy绘制时序图表?
处理传感器数据文件并绘制曲线的解决方案
1. 读取并存储时间数据
每行的时间信息位于箭头->左侧,先按箭头分割每行内容,提取时间字符串后,用datetime模块解析为可后续处理的时间对象:
from datetime import datetime times = [] with open('sensor_data.txt', 'r') as f: for line in f: line = line.strip() if not line: continue # 分割时间与数据段 time_str, data_part = line.split(' -> ') # 按格式解析时间字符串 time_obj = datetime.strptime(time_str, '%H:%M:%S.%f') times.append(time_obj)
解析后的datetime对象既保留完整时间信息,也方便后续转换为绘图所需的数值格式。
2. 提取湿度、温度、热指数的数值
针对箭头右侧的数据段,先用;分割各参数项,再对每个参数按:拆分,清理单位字符后转换为浮点数:
humidity = [] temperature = [] heat_index = [] with open('sensor_data.txt', 'r') as f: for line in f: line = line.strip() if not line: continue _, data_part = line.split(' -> ') # 拆分单个参数 params = data_part.split(';') for param in params: if not param: continue key, value = param.split(':') # 清理单位并转数值 if key == 'Humidity': humidity.append(float(value.replace('%', ''))) elif key == 'Temperature': temperature.append(float(value.replace('°C', '').replace('°C', ''))) elif key == 'Heat index': heat_index.append(float(value.replace('°C', '').replace('°C', '')))
这里处理了数据中多余的Â字符,确保数值能正确转换为浮点数。
3. 用Numpy存储数据并绘制曲线
将收集到的列表转换为Numpy数组,配合matplotlib绘制随时间变化的曲线:
import numpy as np import matplotlib.pyplot as plt from matplotlib.dates import DateFormatter # 转换为Numpy数组 times_np = np.array(times) humidity_np = np.array(humidity) temperature_np = np.array(temperature) heat_index_np = np.array(heat_index) # 创建绘图 fig, ax = plt.subplots(figsize=(10, 6)) # 绘制三条曲线 ax.plot(times_np, humidity_np, label='Humidity (%)', marker='o', linestyle='-') ax.plot(times_np, temperature_np, label='Temperature (°C)', marker='s', linestyle='--') ax.plot(times_np, heat_index_np, label='Heat index (°C)', marker='^', linestyle='-.') # 设置时间轴格式 date_format = DateFormatter('%H:%M:%S') ax.xaxis.set_major_formatter(date_format) plt.xticks(rotation=45) # 添加图表元素 ax.set_xlabel('Time') ax.set_ylabel('Value') ax.set_title('Sensor Data Over Time') ax.legend() plt.tight_layout() plt.show()
这段代码直接使用时间对象绘图,Matplotlib会自动处理时间轴的显示逻辑,同时用不同样式区分三条曲线,提升可读性。
内容的提问来源于stack exchange,提问作者Andrea
相关产品推荐
相关产品推荐

