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

使用R的forecast包为分解时序图添加文本及重命名面板的问题

问题解决方案

1. 仅在趋势面板添加竖线旁文本

forecast::autoplot(decomposed_ts)生成的分面图,分面变量是Series,取值包括"data"、"trend"、"seasonal"、"random"。要只在趋势面板添加文本,可通过构造标注数据集,配合geom_text指定仅匹配trend面板:

library(forecast)    
library(ggplot2)

data("AirPassengers")
decomposed_ts <- decompose(AirPassengers)

# 构造标注数据,指定分面为trend,设置文本位置和内容
annotation_df <- data.frame(
  Series = "trend",  # 匹配趋势面板的分面变量值
  x = 1954.5,        # 竖线旁的x坐标,略偏移避免重叠
  y = 300,           # 文本的y坐标,根据趋势线高度调整
  label = "关键年份1954"
)

forecast::autoplot(decomposed_ts) + 
  geom_vline(xintercept = 1954, colour = "red") +
  geom_text(data = annotation_df, aes(x = x, y = y, label = label), 
            colour = "red", inherit.aes = FALSE)

注:inherit.aes = FALSE用于避免继承原绘图的美学映射,确保仅使用标注数据框中的坐标参数。

2. 修改面板名称为首字母大写

方法一:修改绘图数据的因子水平

先将绘图对象保存为变量,再修改其数据中Series列的因子标签:

p <- forecast::autoplot(decomposed_ts) + 
  geom_vline(xintercept = 1954, colour = "red")

# 修改因子水平标签
levels(p$data$Series) <- c("Data", "Trend", "Seasonal", "Random")

print(p)

方法二:使用facet_wrap的labeller参数

直接在绘图时覆盖分面标签:

forecast::autoplot(decomposed_ts) + 
  geom_vline(xintercept = 1954, colour = "red") +
  facet_wrap(~Series, scales = "free_y", 
             labeller = as_labeller(c(data = "Data", 
                                      trend = "Trend", 
                                      seasonal = "Seasonal", 
                                      random = "Random")))

两种方法都能将data面板名改为Data,同时可统一调整其他面板的首字母大写格式。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 21:55:22