如何在tidygam.plot中添加原始观测点并移除预测点?
解决tidygam绘图中移除预测点并添加原始观测点的问题
问题原因
tidygam的plot()函数生成的ggplot对象会默认继承包含groupings的映射,但原始gest数据集没有该列,直接叠加geom_point()时会触发缺失列的报错。
方案1:修改tidygam生成的绘图对象
保留tidygam的基础绘图框架,移除默认的预测点图层,再明确添加原始观测点:
library(tidygam) library(mgcv) library(dplyr) library(ggplot2) data("gest") # 构建GAM模型 gs <- gam( count ~ s(months, k = 3), data = gest, family = poisson ) # 生成预测数据并创建绘图对象 p <- predict_gam(gs, tran_fun = exp, length_out = 100) %>% plot(series = "months") # 移除默认的预测点图层(默认是第二个图层) p$layers <- p$layers[-2] # 添加原始观测点,关闭继承映射避免报错 p + geom_point(data = gest, aes(x = months, y = count), inherit.aes = FALSE)
关键说明:
- 使用
inherit.aes = FALSE可以避免继承绘图对象中包含groupings的映射,解决列缺失报错 - 通过修改
p$layers移除tidygam默认添加的预测点图层
方案2:手动构建ggplot(自由度更高)
直接基于predict_gam()的结果手动绘制拟合线、置信区间和原始点,完全掌控绘图元素:
# 获取预测数据 pred_data <- predict_gam(gs, tran_fun = exp, length_out = 100) # 手动构建绘图 ggplot() + # 绘制置信区间 geom_ribbon(data = pred_data, aes(x = months, ymin = lower, ymax = upper), fill = "#6baed6", alpha = 0.3) + # 绘制拟合曲线 geom_line(data = pred_data, aes(x = months, y = fit), color = "#2171b5", linewidth = 1) + # 添加原始观测点 geom_point(data = gest, aes(x = months, y = count), color = "#08306b", size = 2) + # 自定义标签和主题 labs(x = "月龄", y = "计数") + theme_minimal()
这种方式适合需要高度自定义绘图样式的场景,无需依赖tidygam的默认绘图逻辑。
内容的提问来源于stack exchange,提问作者MartineJ
相关产品推荐
相关产品推荐

