ggplot2绘制交互效应图时误差棒与线条不匹配及X轴标签无法修改问题
问题修正方案
核心原因说明
- 误差棒错位:原代码混用ggeffect内置plot生成的预测图层、和基于原始数据集的stat_summary图层,二者数据源、分组映射、位置调整逻辑完全不统一,导致点位和误差棒位置偏移。
- X轴标签不生效:一是原代码
scale_x_discrete行缺少右括号导致语法失效,二是未显式指定x轴原始水平与自定义标签的对应关系。
修正后可运行代码
library(ggeffects) library(ggplot2) # 数据生成 iv = runif(n = 100, min = 1, max = 7) condition <- rep(letters[1:2], length.out = 100) y = runif(n = 100, min = 1, max = 100) df <- data.frame(iv, condition = as.factor(condition), y) # 模型拟合 lm20 <- lm(y ~ condition * iv, data = df) # 提取模型预测值作为唯一绘图数据源 pred_df <- ggeffect(lm20, terms = c("condition", "iv")) # 统一用ggplot原生语法绘图 ggplot(pred_df, aes(x = x, y = predicted, colour = group, group = group)) + # 所有图层统一用position_dodge调整分组间距,避免错位 geom_point(position = position_dodge(width = 0.2)) + geom_line(position = position_dodge(width = 0.2)) + # 直接用模型计算好的置信区间生成误差棒,无需重复统计原始数据 geom_errorbar(aes(ymin = conf.low, ymax = conf.high), width = 0.1, position = position_dodge(width = 0.2)) + scale_y_continuous("Voting intentions", limits = c(0, 100)) + scale_colour_discrete(name = "Control", labels = c("Low", "Medium", "High")) + # 显式指定x轴水平与标签的对应关系 scale_x_discrete("Condition", levels = c("a", "b"), labels = c("Low","High"))
效果说明
修改后所有图层基于同一套模型预测值生成,分组位置统一调整,误差棒会和对应点、线完全对齐,x轴标签也会按照自定义内容显示。
内容的提问来源于stack exchange,提问作者Anna Potoczek
相关产品推荐
相关产品推荐

