如何为已有侧边Beeswarm图添加左侧箱线图并保留点分布
解决方案:用Base R布局实现箱线图+蜂群图无重叠展示
不用ggplot系列包的话,直接用Base R的布局功能就能完美保留蜂群点的分布,同时在左侧添加箱线图,分两种实用方法:
方法1:左右分栏布局(推荐)
这种方法把绘图区域分成左右两部分,分别绘制箱线图和蜂群图,完全避免元素重叠,蜂群分布不受任何影响:
# 创建样本数据 x <- rnorm(300) # 设置1行2列的布局,左侧栏宽度小(放箱线图),右侧栏宽度大(放蜂群图) layout(matrix(c(1, 2), nrow = 1), widths = c(1, 3)) # 绘制左侧箱线图 par(mar = c(5, 1, 2, 1)) # 调整边距,减少冗余空间 boxplot(x, horizontal = TRUE, axes = FALSE, col = "lightgray") axis(1) # 显示x轴刻度 # 绘制右侧蜂群图 par(mar = c(5, 0, 2, 2)) # 去掉左侧边距,让两部分衔接更紧凑 beeswarm(x, pch = 19, col = "black", side = 1, axes = FALSE) axis(1) # 显示x轴刻度 # 添加统一的x轴标签 mtext("Value", side = 1, line = 3, outer = TRUE)
方法2:同一绘图区域叠加
如果想要在同一个坐标轴内展示,可通过调整元素位置避免重叠:
x <- rnorm(300) # 调整绘图边距,预留左侧空间 par(mar = c(5, 2, 2, 2)) # 初始化空绘图区域,设置足够大的x轴范围 plot(NA, xlim = c(-4, 4), ylim = c(0, 2), xlab = "Value", ylab = "") # 添加左侧箱线图,调整宽度避免和蜂群重叠 boxplot(x, horizontal = TRUE, at = 1, add = TRUE, boxwex = 0.3, col = "lightgray") # 添加右侧蜂群图,保持原有分布 beeswarm(x, at = 1, pch = 19, col = "black", side = 1, add = TRUE)
两种方法都不会破坏蜂群点的原始分布,方法1的分栏布局更清晰,适合对比展示;方法2的叠加方式更紧凑,适合需要同一坐标轴的场景。
内容的提问来源于stack exchange,提问作者divsan
相关产品推荐
相关产品推荐

