Pandas:基于事件列表批量生成多个±12小时区间时间序列图表
完整实现代码
import matplotlib.pyplot as plt import pandas as pd from datetime import timedelta # 用于计算时间偏移量 # 原有主数据集读取逻辑 df = pd.read_csv('/Users/clove/Documents/Tide_data_repo/parsed.csv',parse_dates=['Date_Time'],index_col= ['Date_Time']) df.Verified = pd.to_numeric(df.Verified, errors='coerce') df.dropna(axis='index',how='any',inplace=True) # ----------------------新增事件遍历绘图逻辑---------------------- # 1. 读取事件列表CSV,替换为你本地实际的文件路径、事件时间列名 event_df = pd.read_csv('你的事件列表文件路径.csv', parse_dates=['事件时间列名']) # 2. 遍历所有事件生成对应区间图表 for idx, event_row in event_df.iterrows(): # 获取当前事件的发生时间 event_time = event_row['事件时间列名'] # 计算±12小时的时间窗口边界 start_time = event_time - timedelta(hours=12) end_time = event_time + timedelta(hours=12) # 从主数据中截取对应窗口的数据集 window_df = df.loc[start_time:end_time] # 跳过窗口内无有效数据的异常场景 if window_df.empty: print(f"第{idx+1}个事件(发生时间:{event_time})对应时间区间无数据,已跳过绘图") continue # 绘图逻辑 fig, ax = plt.subplots(figsize=(12, 6)) window_df.plot(ax=ax) # 增加红色虚线标记事件发生时间 ax.axvline(x=event_time, color='red', linestyle='--', label='事件发生时间') ax.set_title(f"事件{idx+1} 时间区间:{start_time.strftime('%Y-%m-%d %H:%M')} 至 {end_time.strftime('%Y-%m-%d %H:%M')}") ax.legend() # 可选配置:直接保存图片到本地,避免100+图表弹窗占用内存,替换为你本地的存储文件夹路径即可 plt.savefig(f"/Users/clove/Documents/事件图表/事件_{idx+1}_{event_time.strftime('%Y%m%d%H%M')}.png", bbox_inches='tight') # 关闭画布释放内存,批量绘图必加否则会出现内存溢出 plt.close() # 如果你需要逐个弹窗查看图片,注释掉上面的plt.savefig和plt.close,打开下方代码即可 # plt.show()
注意事项
- 代码中的
你的事件列表文件路径.csv、事件时间列名、图片存储文件夹路径需要替换为你本地的实际配置 - 图片存储文件夹需要提前创建完成,否则会触发保存报错
- 如果你的事件列表里有事件名称字段,可以把标题中的
事件{idx+1}替换为event_row['事件名称列名'],图表辨识度会更高
内容的提问来源于stack exchange,提问作者Chris Love
相关产品推荐
相关产品推荐

