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

R语言15分钟时间序列按2小时间隔绘图求助

解决ggplot中15分钟时间序列按2小时分组显示x轴的问题

核心思路

先对时间序列按2小时间隔分组生成区间标签,再通过scale_x_datetime自定义x轴刻度,或用分面的方式展示分组数据。以下是具体实现步骤:


1. 准备环境与示例数据

先加载所需工具包,并构造符合需求的示例数据(可替换为你的真实数据):

library(tidyverse)
library(lubridate)

# 生成96个15分钟间隔的时间点(覆盖全天)
times <- seq(ymd_hms("2024-01-01 00:00:00"), by = "15 mins", length.out = 96)
# 生成随机价格数据(替换为你的真实价格列)
set.seed(123)
prices <- rnorm(96, mean = 50, sd = 5)

# 组合成数据框
df <- tibble(datetime = times, price = prices)

2. 生成2小时区间分组标签

通过floor_date将时间对齐到2小时起点,再拼接成区间字符串:

df <- df %>%
  mutate(
    # 取每个时间点所属2小时区间的起始时间
    two_hour_start = floor_date(datetime, "2 hours"),
    # 生成"00:00-02:00"格式的区间标签
    two_hour_interval = paste0(format(two_hour_start, "%H:%M"), "-", format(two_hour_start + hours(2), "%H:%M"))
  )

3. 绘图实现(两种方式可选)

方式一:单图展示+2小时刻度分隔

保留原始时间序列的连续性,x轴按2小时区间标注,添加虚线分隔不同区间:

ggplot(df, aes(x = datetime, y = price)) +
  geom_line(color = "#2c3e50") +
  geom_point(size = 1.5, color = "#e74c3c") +
  # 自定义x轴:每2小时一个刻度,标签显示区间
  scale_x_datetime(
    breaks = seq(min(df$datetime), max(df$datetime), by = "2 hours"),
    labels = function(x) paste0(format(x, "%H:%M"), "-", format(x + hours(2), "%H:%M")),
    # 旋转标签避免重叠
    guide = guide_axis(angle = 45)
  ) +
  # 添加2小时间隔的虚线,区分分组
  geom_vline(xintercept = seq(min(df$datetime), max(df$datetime) + hours(2), by = "2 hours"), 
             color = "#bdc3c7", linetype = "dashed") +
  labs(
    x = "时间区间(2小时)",
    y = "平均价格",
    title = "每日15分钟平均价格按2小时分组展示"
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5, size = 14, face = "bold"),
    axis.title = element_text(size = 12),
    axis.text.x = element_text(size = 10)
  )

方式二:分面展示每个2小时区间

把每个2小时区间单独做成子图,方便对比不同时段的价格变化:

ggplot(df, aes(x = format(datetime, "%H:%M"), y = price)) +
  geom_line(group = 1, color = "#2c3e50") +
  geom_point(size = 1.5, color = "#e74c3c") +
  # 按2小时区间分面,3列排列
  facet_wrap(~two_hour_interval, ncol = 3) +
  labs(
    x = "15分钟时间点",
    y = "平均价格",
    title = "每日15分钟平均价格按2小时分组展示"
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5, size = 14, face = "bold"),
    axis.title = element_text(size = 12),
    strip.text = element_text(size = 10, face = "bold")
  )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 13:50:13