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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 13:35:20