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

基于时间序列的月维度3小时区间箱线图实现方法咨询

实现按月份分组、3小时区间的箱线图

步骤1:数据预处理

先给原始DataFrame添加两个关键字段,用于后续分组和绘图:

  • Month:提取日期的YYYY-MM格式标签(避免跨年时同月份数据混淆)
  • 3H_Interval:标记每条数据所属的3小时时间区间(格式如00:00-03:00)
import pandas as pd
import random
import matplotlib.pyplot as plt
import seaborn as sns

# 生成示例数据
dikt={'Date': pd.date_range("2018-01-01", periods=1500, freq="5T"),
      'Snd': [random.randrange(1, 50, 1) for i in range(1500)]}
df=pd.DataFrame(dikt)

# 添加月份标签列
df['Month'] = df['Date'].dt.strftime('%Y-%m')
# 生成3小时区间标签
df['3H_Interval'] = df['Date'].dt.hour // 3 * 3
df['3H_Interval'] = df['3H_Interval'].apply(lambda x: f"{x:02d}:00-{x+3:02d}:00")

步骤2:按月份分组绘制箱线图

遍历每个月份的子数据集,单独绘制对应月份的箱线图,x轴为3小时区间,y轴为Snd值:

# 获取所有唯一的月份
unique_months = df['Month'].unique()

# 设置绘图风格
sns.set_style("whitegrid")

# 逐个月份生成箱线图
for month in unique_months:
    # 筛选当前月份的数据
    month_data = df[df['Month'] == month]
    # 创建画布
    plt.figure(figsize=(10, 6))
    # 绘制箱线图,指定x轴顺序保证时间递增
    sns.boxplot(
        x='3H_Interval', 
        y='Snd', 
        data=month_data, 
        order=sorted(month_data['3H_Interval'].unique())
    )
    # 设置图表标题和标签
    plt.title(f'{month} 各3小时区间Snd值箱线图')
    plt.xlabel('3小时时间区间')
    plt.ylabel('Snd值')
    # 调整x轴标签角度避免重叠
    plt.xticks(rotation=45)
    # 自动调整布局
    plt.tight_layout()
    # 显示图表
    plt.show()

关键细节说明

  • 3小时区间的计算逻辑:通过dt.hour // 3 *3得到区间起始小时(0、3、6...21),再格式化为易读的区间字符串。
  • 指定order参数可以确保x轴的3小时区间按时间顺序排列,不会出现乱序。
  • 使用seaborn绘制箱线图比原生matplotlib更美观,且自带网格便于数据对比。

内容的提问来源于stack exchange,提问作者savvas pehlivanidis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 04:37:32