如何在ggplot折线图中手动添加标准误(SE)阴影区域?
解决ggplot中geom_ribbon添加标准误阴影报错的问题
错误原因
- geom_ribbon参数传递错误:你在
geom_ribbon里直接把数据框PEAPupilGrob放在第一个参数位置,不符合ggplot语法——全局数据已经在ggplot()中指定,geom层无需重复传递;若要单独传数据,需明确指定data=PEAPupilGrob。 - ymin与ymax顺序颠倒:
ymin必须是区间下限(更小值),ymax是区间上限(更大值),你写的ymin=predicted+std.error, ymax=predicted-std.error完全颠倒,导致ggplot无法识别有效区间直接报错。 - 可选优化:你的数据框已包含
conf.low和conf.high(置信区间上下限),如果要展示统计置信区间而非单纯标准误范围,直接用这两列更严谨。
修正后的代码(标准误阴影版本)
# 先定义数据框(确保变量名正确) PEAPupilGrob <- data.frame( x = c(-0.4, -0.2, 0, 0.2, 0.4, 0.6, 0.8), predicted = c(0.68210177774552,0.824971306553031, 0.911923452641176,0.957884075392982,0.98037732841837, 0.990970636204506,0.995869238009664), std.error = c(0.38195580456581,0.22923983122453, 0.123053035742282,0.183476660090966,0.328809680207388, 0.488362992665536,0.651775655589864), conf.low = c(0.503706928219636,0.750465569524191, 0.890530388978947,0.940737822137466,0.963272013048915, 0.976820374876465,0.985337590318705), conf.high = c(0.819367367560485,0.880765628369274, 0.929466912178259,0.97022643270505,0.989602181967697, 0.996513543605265,0.998845128758168), group = as.factor(c("PupilAmp_SMC", "PupilAmp_SMC","PupilAmp_SMC","PupilAmp_SMC", "PupilAmp_SMC","PupilAmp_SMC","PupilAmp_SMC")), group_col = as.factor(c("PupilAmp_SMC", "PupilAmp_SMC","PupilAmp_SMC","PupilAmp_SMC", "PupilAmp_SMC","PupilAmp_SMC","PupilAmp_SMC")) ) # 修正后的绘图代码 PupilPEA_SMC <- ggplot(PEAPupilGrob, aes(x= x, y=predicted)) + geom_line(color = "red", size = 2) + ylim(.65,1.0) + labs (y = "Likelihood of Post-Error Accuracy", x = "Single Trial Pupillary Amplitude") + # 修正:移除重复数据传递,调整ymin/ymax顺序 geom_ribbon(aes(ymin=predicted - std.error, ymax= predicted + std.error), alpha=0.1, fill = "red", color = "black", linetype = "dotted") + theme_bw() + theme(text = element_text(size = 20)) PupilPEA_SMC
推荐版本(使用已有置信区间)
如果你的需求是展示统计置信区间,直接用数据框中已有的conf.low和conf.high更合适:
PupilPEA_SMC <- ggplot(PEAPupilGrob, aes(x= x, y=predicted)) + geom_line(color = "red", size = 2) + ylim(.65,1.0) + labs (y = "Likelihood of Post-Error Accuracy", x = "Single Trial Pupillary Amplitude") + geom_ribbon(aes(ymin=conf.low, ymax= conf.high), alpha=0.1, fill = "red", color = "black", linetype = "dotted") + theme_bw() + theme(text = element_text(size = 20)) PupilPEA_SMC
内容的提问来源于stack exchange,提问作者SBL
相关产品推荐
相关产品推荐

