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

ggplot2 spaghetti图添加loess回归线、中位数(IQR)或均值(SD)方法求助

问题原因

  • 两次运行异常的核心诱因是ggplot全局美学映射中设置了group=ID,后续统计图层默认继承该分组规则,导致统计计算按每个ID单独执行:
    1. 绘制LOESS线时,系统会为每个ID单独拟合曲线,多数ID仅2~3个观测值,达不到LOESS拟合的样本要求,因此抛出大量警告
    2. 绘制中位数线时,stat_summary的fun.df参数要求传入的是函数名而非提前计算好的数据框,且按ID分组后计算的中位数也不是你需要的整体变化趋势

解决方案

方案1:添加整体LOESS非线性趋势线

给geom_smooth单独设置group=1覆盖全局ID分组即可,代码如下:

# 注意你定义的数据集名为mydata,原代码中soquestiondata需替换为mydata
sp_loess <- 
  ggplot(mydata, aes(x=age, y=continuous_outcome, group=ID, color=ID)) + 
  geom_point() + 
  geom_line() + 
  xlab("年龄(岁)") + 
  ylab("连续结局变量") +
  theme(legend.position = "none") + 
  # group=1表示所有数据作为整体拟合,颜色固定为红色,se=FALSE可关闭置信区间阴影
  geom_smooth(method="loess", formula=y~x, group=1, color="red", se=TRUE)
sp_loess

方案2:添加中位数趋势线

无需提前计算中位数,直接通过stat_summary指定计算逻辑与整体分组即可:

sp_median <- 
  ggplot(mydata, aes(x=age, y=continuous_outcome, group=ID, color=ID)) + 
  geom_line() + 
  geom_point() + 
  # fun指定统计函数为中位数,group=1表示整体计算,linewidth调整线宽
  stat_summary(fun = median, group=1, color="red", geom="line", linewidth=1) + 
  xlab("年龄(岁)") + 
  ylab("连续结局变量") +
  theme(legend.position = "none")
sp_median

如果需要展示分箱的中位数散点,把geom="line"改为geom="point"即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 14:54:03