如何修正ggplot2中多因子数据95%预测置信区间重复绘制的问题?
问题根源
你代码里重复出现置信区间,是因为predictInterval()会给每一行原始观测都生成一组预测值(fit)、下限(lwr)和上限(upr)。而你的每个xaxis类别对应20条观测,所以同一个xaxis位置会被重复绘制20次误差线,看起来就像多条重叠的线。
修正方法
先对数据按xaxis分组,提取每个类别对应的唯一预测值和置信区间(因为同组内的fit、lwr、upr完全一致),生成一个汇总数据集,再用这个汇总集来绘制误差线和均值点,原始数据点保留用原数据集绘制。
修正后的完整代码
# 生成数据 df <- data.frame (yaxis = rnorm(120,5,1), xaxis = rep(c("A","B","C","D","E", "F"), times = 20), factor = rep(c("1","2","3","4","5", "6"), each = 20)) df$xaxis <- as.factor(df$xaxis) df$factor <- as.factor(df$factor ) # 拟合模型并生成预测区间 library(lmerTest) mod <- lmer(yaxis ~ xaxis + (1|factor), df) mod.fit <- predictInterval(mod, df) df.fit <- cbind(df, mod.fit) # 按xaxis分组提取唯一的预测值和置信区间(同组内值完全一致) library(dplyr) df_summary <- df.fit %>% distinct(xaxis, fit, lwr, upr, .keep_all = FALSE) # 绘图:原始点用原数据,误差线和均值点用汇总数据 library(ggplot2) ggplot(df.fit, aes(x = xaxis, y = yaxis, color = xaxis)) + geom_point() + theme_classic() + # 用汇总数据画误差线 geom_errorbar(data = df_summary, aes(y = fit, min = lwr, max = upr), color = "black", width = 0.3) + # 用汇总数据画均值点 geom_point(data = df_summary, aes(y = fit), color = "black", size = 5)
补充说明
distinct(xaxis, fit, lwr, upr)会直接保留每个xaxis对应的唯一一组fit、lwr、upr值,避免重复绘制。- 绘图时通过
data参数指定不同图层用的数据集,原始点用全量数据,误差线和均值点用汇总数据,这样就不会出现重复的置信区间了。
内容的提问来源于stack exchange,提问作者Share
相关产品推荐
相关产品推荐

