R语言嵌套ggplot分面图中连接相同ID数据点的实现方法
问题根源
连线错位是因为线层和散点层的位置计算规则不匹配:你的散点层用position_jitterdodge()对同一Sex分类下不同Time的点做了横向避让偏移,但geom_line()默认使用原始x轴坐标绘制,没有做对应的避让偏移,自然无法和散点位置对齐。该问题不需要新增额外面板即可解决。
修正方案
只需要给geom_line()配置和散点层完全一致的位置调整参数,同时补全分组映射的维度,避免跨分组错连:
- 线层同样传入
position = position_jitterdodge(jitter.width = 0, jitter.height = 0),保证线的端点x轴偏移量和对应散点完全一致 - 线的分组映射使用
interaction(ID, Sex, Group),确保仅连接同一个体在对应分组、对应性别下的两个时间点 - 修正原散点代码里
size参数遗漏的等号笔误
修正后的完整代码:
ggplot(mydata, aes(x = Sex, y = Variable, fill = Time)) + facet_grid(. ~ Group) + geom_boxplot(alpha = 0.80, outlier.colour = NA) + geom_point( aes(fill = Time), size = 2, shape = 21, position = position_jitterdodge(jitter.width = 0, jitter.height = 0) ) + geom_line( aes(group = interaction(ID, Sex, Group)), size = 0.3, alpha = 0.8, position = position_jitterdodge(jitter.width = 0, jitter.height = 0) )
如果需要区分不同时间点连线的颜色,可以在线层的aes()里增加colour = Time映射,默认细黑线的样式更适合突出配对趋势,不会干扰箱线和散点的信息展示。
内容的提问来源于stack exchange,提问作者Marianela
相关产品推荐
相关产品推荐

