如何在R中基于ts对象按年份绘制箱线图?
按年份为时间序列对象绘制箱线图
要实现按年份绘制箱线图,核心是从ts对象中提取每个观测对应的年份作为分组变量,再传入boxplot函数即可。
方法1:基础R实现(无需额外包)
通过time()获取每个观测的时间戳,再用floor()提取年份的整数部分:
# 创建时间序列数据 data <- runif(240) data_ts <- ts(data, start = c(2000, 1), frequency = 12) # 提取年份分组 year_groups <- floor(time(data_ts)) # 按年份绘制箱线图 boxplot(data_ts ~ year_groups, xlab = "年份", ylab = "观测值", main = "各年份观测值箱线图")
方法2:借助lubridate包(更直观)
如果习惯用日期处理工具,可通过lubridate::year()直接提取年份:
library(lubridate) # 将时间戳转为Date类型后提取年份 year_groups <- year(as.Date(time(data_ts))) # 绘制箱线图 boxplot(data_ts ~ year_groups, xlab = "年份", ylab = "观测值", main = "各年份观测值箱线图")
说明
time(data_ts)返回十进制格式的时间(例如2000年1月对应2000.0,2000年12月对应2000.9167),floor()取整后即可得到对应年份。- 两种方法都能实现按年份分组绘制箱线图,基础R方法无需依赖额外包,更轻量化。
内容的提问来源于stack exchange,提问作者AlejandroDGR
相关产品推荐
相关产品推荐

