You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按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标记夜间时段,方便你快速识别与睡眠相关的用电模式。
  • 文件名规范:用日期命名图表文件,后续标注时可以直接关联日期,便于整理标签数据。

三、后续标注与分类任务建议

  1. 标注方式:手动查看每个图表,记录睡眠时段(比如开始和结束时间),将标签保存为CSV文件,包含date、sleep_start、sleep_end等字段,文件名和图表文件名一一对应。
  2. 标签整合:后续可以将标签数据和原始用电数据合并,提取夜间用电特征(比如平均功耗、波动幅度、低功耗持续时长等),用于分类模型的训练与测试。

内容的提问来源于stack exchange,提问作者A. Arash Chitgar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:18:33