蜂群图是一种一维散点图,用于在同一数值轴上展示大量离散数据点。它通过对重叠点进行“避碰”排列,使每个点都可见,形成类似蜜蜂群聚的视觉效果,从而直观呈现数据的密度、分布形态以及异常值。
1. 工作原理
- 点的排布:在给定的分类或数值轴上,所有数据点先沿轴线对齐,然后在横向(或纵向)方向上进行微小偏移,使相邻点不重叠。偏移的幅度通常由算法(如 beeswarm 包的排布算法、Van der Corput 序列或 Tukey 纹理技术)自动计算。
- 密度表现:点越密集的区域,点的排列会更紧凑,视觉上形成“蜂巢”式的密集带,帮助观察局部数据密度。
2. 与其他散点图的区别
图表类型 | 主要特点 | 优势 | 局限 |
---|---|---|---|
普通散点图 | 点直接绘制,易出现重叠 | 简单直观 | 大样本时点会遮挡 |
抖动图(jitter) | 随机在横向/纵向加入噪声 | 快速避免重叠 | 随机性导致不同绘制结果,密度信息不够直观 |
蜂群图 | 采用系统化的避碰算法,点紧密排列 | 所有点均可见,密度信息清晰 | 对极大数据集计算成本稍高 |
因此,蜂群图在需要保留每个样本信息且观察分布细节时尤为适用。
3. 常见应用场景
- 分类变量下的数值分布:如不同地区的收入、不同实验组的测量值。
- 异常值检测:孤立的点易被快速发现。
- 机器学习解释:SHAP 值的 beeswarm 图用于展示特征对模型输出的贡献分布。
- 探索性数据分析(EDA):在数据量中等(几百到几千点)时,能够兼顾细节与整体趋势。
4. 主流实现工具
语言/平台 | 关键库或插件 | 主要函数/方法 |
---|---|---|
R | beeswarm 包、ggbeeswarm (基于 ggplot2 ) |
beeswarm() , geom_beeswarm() |
Python | seaborn 的 swarmplot 、matplotlib + beeswarm 实现 |
sns.swarmplot() |
Tableau | 内置 Beeswarm Chart(可通过自定义标记实现) | |
JavaScript | amCharts、RAWGraphs、Vega‑Lite 等均提供 beeswarm 示例 | |
PowerBI / Excel | 通过自定义可视化或插件实现类似效果(如 beeswarm 插件) |
5. 绘制示例(R)
install.packages("beeswarm")
library(beeswarm)
# 使用 iris 数据集的 Sepal.Length 按 Species 分组绘图
beeswarm(Sepal.Length \~ Species, data = iris,
pch = 16, col = rainbow(3),
main = "Iris Sepal Length – Beeswarm Plot")
该代码会生成每个物种的花萼长度点云,点之间不重叠,密度高的区域自然形成“蜂群”形态。
6. 优缺点总结
优点
- 所有数据点均可见,避免信息丢失。
- 直观展示局部密度,便于发现聚类或异常。
- 可结合颜色、大小等映射额外变量,信息量丰富。
缺点
- 对极大数据集(上万点)计算成本上升,可能需要抽样或改用密度图。
- 横向空间有限,若类别过多或点数极大,图形会显得拥挤。
7. 小结
蜂群图是一种兼具可读性与信息完整性的可视化手段,适用于需要细致观察单点分布的场景。通过多种语言和平台的实现,用户可以灵活选择最适合自己工作流的工具来绘制蜂群图,从而提升数据分析的洞察力。
声明:文章均为AI生成,请谨慎辨别信息的真伪和可靠性!