如何在R语言autoplot绘图中添加geom_smooth并解决y美学缺失报错
报错原因
ggfortify包的autoplot()绘制多变量时间序列时,会自动将宽格式的时间序列转换为长格式绘图,但美学映射y没有全局绑定,新增的geom_smooth()无法自动识别到对应的值列,因此触发缺失y美学的报错。
解决方法
方法1:直接指定geom_smooth的y映射
不需要修改原有绘图逻辑,仅需在geom_smooth()中手动指定映射的y列为value(autoplot转换长格式后的值列默认命名为value)即可:
library(ggfortify) library(ggplot2) # 原有数据生成代码 ds <- as.data.frame(replicate(6, rnorm(100))) ds <- ts(ds, start = 1990, frequency = 4) colnames(ds) <- paste0("Variable", sep = "_", 1:ncol(ds)) # 加平滑线的绘图代码 autoplot(ds, nrow = 3, ncol = 2) + geom_smooth(aes(y = value), method = "loess", se = FALSE)
说明:
se = FALSE用于关闭平滑线的置信区间填充,不需要可以删掉该参数。
方法2:手动转换为长格式用原生ggplot绘图
如果方法1因为包版本差异不生效,可以手动转换数据格式后用原生ggplot语法绘图,可控性更高:
library(tidyverse) library(zoo) # 数据转换为tidy长格式 ds_tidy <- as.data.frame(ds) %>% mutate(date = index(ds)) %>% pivot_longer(cols = starts_with("Variable"), names_to = "variable", values_to = "value") # 绘图 ggplot(ds_tidy, aes(x = date, y = value)) + geom_line() + facet_wrap(~variable, nrow = 3, ncol = 2, scales = "free_y") + geom_smooth(method = "loess", se = FALSE) + theme_bw()
内容的提问来源于stack exchange,提问作者bic ton
相关产品推荐
相关产品推荐

