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

R中如何绘制按年分组且x轴无年份的小时级时间序列折线图

多年份小时级时间序列重叠折线图实现方案

核心实现逻辑

  • 把所有时间戳的年份统一替换为同一个虚拟年份(推荐选闰年,比如2020,兼容2月29日的日期数据),保留原有月、日、小时等全部时间精度,让不同年份的相同时刻对齐到x轴的同一位置
  • 绘图时x轴映射这个统一年份的时间列,分组、颜色映射使用原始时间的真实年份
  • 调整x轴刻度显示格式,隐藏虚拟年份,仅展示月、日、小时信息

该方案不需要将时间转为无年份字符串(会导致转POSIXct时缺少年份信息返回NA),也不需要使用年积日(yday),完全保留小时级的周期变化细节。

完整可运行代码

require(data.table)
require(lubridate)
require(ggplot2)

# 样例数据生成
dt <- data.table(date = c(seq(as.Date("2018-03-01"), as.Date("2018-03-07"),by="day"), seq(as.Date("2019-03-01"), as.Date("2019-03-07"),by="day"), seq(as.Date("2020-03-01"), as.Date("2020-03-07"),by="day")), hr = rep(1:24, 21))
dt[, value := sin(hr)*sample(1:3,1)]
dt[, dateTime := as.POSIXct(paste0(date," ",hr,":00:00"), format="%Y-%m-%d %H:%M")]

# 新增统一虚拟年份的时间列
dt[, common_datetime := update(dateTime, year = 2020)]

# 绘图
ggplot(dt, aes(x = common_datetime, y = value, group = year(dateTime), colour = factor(year(dateTime)))) +
  geom_line() +
  # 调整x轴标签,仅显示月-日 小时:分钟
  scale_x_datetime(date_labels = "%m-%d %H:%M", name = "日期时间") +
  labs(colour = "年份")

效果说明

运行代码后x轴会展示3月1日到3月7日的逐小时时间刻度,2018、2019、2020三个年份各为独立的折线,完全符合需求。如果你的数据包含2月29日的记录,只需要把update函数里的year参数修改为任意闰年即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 00:36:09