如何按12pm至次日12pm的24小时间隔绘制Pandas DataFrame多幅图表?
解决方案:按12pm-次日12pm分组并绘制单日用电图表
针对你的需求——处理3年6秒分辨率的住宅用电数据,按12pm到次日12pm的24小时区间分组,生成1500+单日图表用于睡眠模式标注和后续分类任务,我整理了一套完整的实现步骤,包含代码示例和关键细节说明:
一、数据分组:调整时间窗口至12pm起始
你的数据从首日12pm开始,所以需要把分组窗口从默认的午夜起始改为12pm起始。Pandas的pd.Grouper可以轻松实现这个需求,通过offset参数偏移分组起始时间:
import pandas as pd import matplotlib.pyplot as plt import matplotlib.dates as mdates # 假设你的DataFrame已包含DatetimeIndex,用电数据列名为'power_consumption' # df = pd.read_csv('your_data.csv', index_col='timestamp', parse_dates=True) # 设置分组规则:24小时为一个周期,起始点偏移12小时(即从12pm开始) grouped = df.groupby(pd.Grouper(freq='24H', offset='12H'))
这里的offset='12H'会把每个24小时窗口的起始时间从默认的午夜(00:00)调整为中午12点,完美匹配你的数据起始逻辑。分组后每个组对应一个完整的12pm-次日12pm区间。
二、循环绘制并保存单日图表
接下来循环遍历每个分组,绘制单日用电曲线,重点突出夜间时段(方便标注睡眠模式)。为了避免内存溢出,每个图表绘制完成后要及时关闭:
# 创建保存图表的文件夹(不存在则自动创建) import os os.makedirs('daily_power_plots', exist_ok=True) # 遍历每个分组 for group_date, group_data in grouped: # 跳过数据量不足的分组(比如首尾可能不完整的区间) full_day_records = (24 * 60 * 60) // 6 # 6秒分辨率下,完整24小时应有14400条数据 if len(group_data) < full_day_records: continue # 创建新的图表画布 fig, ax = plt.subplots(figsize=(10, 6)) # 绘制用电曲线 ax.plot(group_data.index.time, group_data['power_consumption'], linewidth=0.8) # 配置图表样式,突出核心信息 ax.set_title(f"Power Consumption: {group_date.strftime('%Y-%m-%d')} 12pm - {(group_date + pd.Timedelta(days=1)).strftime('%Y-%m-%d')} 12pm") ax.set_xlabel('Time of Day') ax.set_ylabel('Power Consumption (kW)') # 设置x轴刻度为每2小时一次,便于查看夜间时段 ax.xaxis.set_major_locator(mdates.HourLocator(interval=2)) ax.xaxis.set_major_formatter(mdates.DateFormatter('%H:%M')) # 高亮夜间区间(示例为22:00到次日06:00,可根据需求调整) ax.axvspan(pd.to_datetime('22:00').time(), pd.to_datetime('06:00').time(), color='gray', alpha=0.2) # 调整布局并保存图表 plt.tight_layout() plot_filename = f"daily_power_plots/{group_date.strftime('%Y%m%d')}_12pm_to_next.png" plt.savefig(plot_filename, dpi=150) plt.close(fig) # 关闭图表释放内存,避免1500幅图占用过多资源
关键细节说明:
- 数据完整性检查:通过判断分组数据量是否符合6秒分辨率的完整24小时数据(14400条),跳过首尾可能不完整的区间,保证图表都是有效单日数据。
- 夜间高亮:用
axvspan标记夜间时段,方便你快速识别与睡眠相关的用电模式。 - 文件名规范:用日期命名图表文件,后续标注时可以直接关联日期,便于整理标签数据。
三、后续标注与分类任务建议
- 标注方式:手动查看每个图表,记录睡眠时段(比如开始和结束时间),将标签保存为CSV文件,包含
date、sleep_start、sleep_end等字段,文件名和图表文件名一一对应。 - 标签整合:后续可以将标签数据和原始用电数据合并,提取夜间用电特征(比如平均功耗、波动幅度、低功耗持续时长等),用于分类模型的训练与测试。
内容的提问来源于stack exchange,提问作者A. Arash Chitgar
相关产品推荐
相关产品推荐

