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

GAM绘图:log10变换下geom_smooth置信区间显示与配色问题

解决方案

问题1:tidymv::geom_smooth_ci置信区间配色不生效

geom_smooth_ci的线条用color美学映射,置信区间用fill美学映射,你之前只设置了颜色尺度,没有设置填充尺度。只需同时映射color和fill到class,并分别调用viridis的颜色和填充尺度即可:

# 先修正预测数据集的变量名(可选,但更清晰)
pred.class.1 <- predict_gam(mod.1) %>%
  rename(log_area = `log10(area)`) %>%
  mutate(class = "Class 1") 

pred.class.2 <- predict_gam(mod.2) %>%
  rename(log_area = `log10(area)`) %>%
  mutate(class = "Class 2") 

dataset <- rbind(pred.class.1, pred.class.2)

# 绘图
ggplot(dataset, aes(x = log_area, y = fit, color = class, fill = class)) +
  tidymv::geom_smooth_ci() +
  # 设置x轴为log10尺度,对应原始area的1/10/100
  scale_x_continuous(trans = "log10", breaks = c(0,1,2), labels = c("1", "10", "100")) +
  # y轴也设置为log10尺度
  scale_y_continuous(trans = "log10") +
  # 线条用viridis离散配色
  scale_color_viridis(discrete = TRUE) +
  # 置信区间用viridis离散配色,添加透明度
  scale_fill_viridis(discrete = TRUE, alpha = 0.3) +
  labs(x = "Area", y = "Value") +
  theme_bw()

问题2:geom_smooth加scale_x_log10后置信区间消失

出现这个问题的核心原因是:你手动拟合的GAM模型用的是log10(area)作为自变量,但直接用geom_smooth时,默认会对原始area重新拟合模型,当添加scale_x_log10()后,x轴的尺度变换会把原始拟合的置信区间压缩到几乎不可见。

有两种解决方式:

方式1:用预先生成的预测数据集绘图(推荐,可控性更高)

直接使用你已经生成的dataset,用geom_ribbon绘制置信区间,geom_line绘制拟合线条,完全自定义样式:

ggplot(dataset, aes(x = log_area, color = class, fill = class)) +
  # 先画置信区间(避免被线条覆盖)
  geom_ribbon(aes(ymin = lower, ymax = upper), alpha = 0.3) +
  # 再画拟合线条
  geom_line(aes(y = fit), linewidth = 1) +
  scale_x_continuous(trans = "log10", breaks = c(0,1,2), labels = c("1", "10", "100")) +
  scale_y_continuous(trans = "log10") +
  scale_color_viridis(discrete = TRUE) +
  scale_fill_viridis(discrete = TRUE) +
  labs(x = "Area", y = "Value") +
  theme_bw()

方式2:让geom_smooth调用和你手动拟合一致的GAM模型

在geom_smooth中明确指定公式,对x做log10变换,确保拟合逻辑和手动模型一致:

# 先合并原始数据
original_data <- bind_rows(
  data.class.1 %>% mutate(class = "Class 1", value = value.1),
  data.class.2 %>% mutate(class = "Class 2", value = value.2)
)

# 绘图
ggplot(original_data, aes(x = area, y = value, color = class, fill = class)) +
  geom_point(alpha = 0.5) +
  # 指定GAM方法和对应公式
  geom_smooth(method = "gam", formula = y ~ s(log10(x), k=3), alpha = 0.3) +
  scale_x_log10() +
  scale_y_log10() +
  scale_color_viridis(discrete = TRUE) +
  scale_fill_viridis(discrete = TRUE) +
  labs(x = "Area", y = "Value") +
  theme_bw()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 05:38:17