如何在ggplot分组箱线图上叠加其他数据集的对应散点
分组箱线图叠加独立数据集点的解决方法
错位原因
你之前手动添加的点位置异常,是因为分组箱线图的每个分组元素默认做了水平偏移排列,仅指定X轴分类的话,点会落在两个分组箱线图的中间位置,和箱线图实际位置不匹配。
推荐方案(支持批量添加多个点)
把需要叠加的点整理为独立数据框,和原图使用统一的位置偏移规则即可完美对齐:
- 首先构建待叠加的点数据集,字段需和原图映射的变量完全对应:
# 可根据需要添加任意多行数据 point_data <- data.frame( g_whoregion = c("AFR", "AMR", "SEAR"), # 和原图X轴分类取值一致 name = c("你的第一个分组名", "你的第二个分组名", "你的第一个分组名"), # 和原图分组变量name的水平一致 value = c(27043, 15000, 32000) # 对应Y轴的数值 )
- 定义统一的闪避规则,绘图时箱线图和点都使用该规则:
# 定义和箱线图默认偏移宽度一致的闪避对象 pd <- position_dodge(width = 0.9) ggplot(longer_, aes(x = g_whoregion, y = value, color = name)) + geom_boxplot(position = pd) + # 叠加独立数据集的点,指定自定义数据集和相同的偏移规则 geom_point(data = point_data, position = pd, color = "red", size = 3)
临时方案(仅添加单个点)
如果只需要临时添加单个点,也可以手动计算位置:
分类变量在ggplot内部会被转为数值编码,比如AFR如果是X轴的第一个分类,对应的数值是1,两个分组的箱线图中心分别为1 - 0.225和1 + 0.225,手动指定对应位置即可:
# 示例:给AFR分类的第一个分组加红点 ggplot(longer_, aes(x = g_whoregion, y = value, color = name)) + geom_boxplot() + geom_point(aes(x = 1 - 0.225, y = 27043), color = "red")
内容的提问来源于stack exchange,提问作者Laz
相关产品推荐
相关产品推荐

