如何用Matplotlib将解析后的多时间序列数据绘制成单图多折线?
在Matplotlib中绘制多时间序列折线图
嘿,我来帮你搞定这个!你已经把时间序列数据整理成「序列标签为键、(time, value)元组列表为值」的字典,这一步已经为绘图打好了基础。接下来用Matplotlib在同一张图里绘制每个序列的独立折线其实很简单,我给你一步步演示:
步骤1:导入必要的库
首先确保你已经安装了matplotlib,如果需要处理字符串格式的时间,还可以导入datetime工具:
import matplotlib.pyplot as plt from datetime import datetime # 处理时间字符串转datetime对象用
步骤2:确认你的数据结构
假设你的字典长这样(模拟你的实际数据):
# 示例数据:键是序列名称,值是(time, value)元组列表 time_series_dict = { "温度传感器A": [(datetime(2024, 5, 1), 22.5), (datetime(2024, 5, 2), 24.1), (datetime(2024, 5, 3), 23.3)], "温度传感器B": [(datetime(2024, 5, 1), 21.8), (datetime(2024, 5, 2), 23.5), (datetime(2024, 5, 3), 22.9)], "湿度传感器": [(datetime(2024, 5, 1), 65), (datetime(2024, 5, 2), 62), (datetime(2024, 5, 3), 68)] }
如果你的time是字符串格式(比如"2024-05-01"),记得先转成datetime对象,不然Matplotlib无法正确识别时间轴:
# 时间字符串转datetime的示例 time_series_dict["温度传感器A"] = [(datetime.strptime(t_str, "%Y-%m-%d"), val) for t_str, val in time_series_dict["温度传感器A"]]
步骤3:绘制多折线图
接下来创建画布,遍历字典的每个序列,拆分时间和数值后逐一绘制:
# 创建画布和轴对象,设置合适的尺寸 fig, ax = plt.subplots(figsize=(10, 6)) # 遍历字典中的每个时间序列 for series_name, data_points in time_series_dict.items(): # 把元组列表拆成独立的时间列表和数值列表 timestamps = [t for t, val in data_points] values = [val for t, val in data_points] # 绘制折线,添加标记点和序列名称作为图例标签 ax.plot(timestamps, values, marker='o', linestyle='-', label=series_name) # 添加图表元素,提升可读性 ax.set_xlabel("日期") ax.set_ylabel("数值") ax.set_title("多传感器时间序列对比") ax.legend() # 显示图例,区分不同序列 plt.xticks(rotation=45) # 旋转x轴标签,避免重叠 # 自动调整布局并显示图表 plt.tight_layout() plt.show()
小技巧
- 可以自定义折线的样式,比如
color指定颜色、linestyle设置线型(--虚线、:点线等),让不同序列更易区分 - 如果时间轴刻度太密集,可使用
matplotlib.dates模块的工具来格式化刻度 - 若数据量很大,建议关闭标记点(去掉
marker='o'),避免图表过于杂乱
这样就能在同一张图里清晰展示所有时间序列的变化趋势啦!
内容的提问来源于stack exchange,提问作者Mike Sweeney
相关产品推荐
相关产品推荐

