在ggplot2中使用现有CI变量为geom_smooth或趋势线添加95%置信区间
解决方案
你选择geom_line搭配geom_ribbon的实现思路完全正确,报错是代码写法有误导致的,修改后即可实现和geom_smooth一致的带置信区间阴影的趋势线效果。
错误原因
你之前的代码存在两个问题:
geom_line的data参数传入了df$weight向量,ggplot要求所有图层的data参数必须为数据框类型- 两个图层均未声明x轴映射,且aes内无需通过
df$的形式调用列,直接传入列名即可
正确实现代码
library(ggplot2) # 原始数据 df <- data.frame(weight = c(156.8, 170, 185, 199.0, 203, 208), lower95 = c(151.2, 165, 181.6, 194.5, 202, 206.4), upper95 = c(162.8, 175, 187.9, 203.7, 204, 211.9), year = c(2010, 2014, 2017, 2019, 2020, 2021)) # 绘图代码 ggplot(data = df, aes(x = year)) + # 主趋势线,和geom_smooth默认样式对齐 geom_line(aes(y = weight), color = "#3366FF", linewidth = 1) + # 95%置信区间阴影,alpha控制透明度 geom_ribbon(aes(ymin = lower95, ymax = upper95), fill = "#3366FF", alpha = 0.2) + labs(x = "年份", y = "体重") + theme_minimal()
额外疑问解答
你提到的mpg示例中geom_smooth的置信区间是函数内部自动计算的:geom_smooth默认使用loess局部回归算法,拟合过程中会自动计算每个x位置对应的拟合值和标准误,通过拟合值 ± 1.96*标准误得到95%置信区间的上下限,不需要提前准备SE列。
内容的提问来源于stack exchange,提问作者logjammin
相关产品推荐
相关产品推荐

