ggplot2中geom_jitter抖动图的点间距离有何实际含义
核心结论
geom_jitter() 给散点加的抖动是纯随机的可控偏移,散点在抖动方向上的精确距离、偏移量没有任何实际含义,不对应任何真实数据差异,不能作为信息解读的依据。
抖动的设计目的
- 唯一核心作用是解决离散/分类轴上散点完全重叠遮挡的问题:如果不加抖动,同一分类坐标下的所有点会完全叠在一起,根本看不出每个分类里有多少样本、分布密度如何。加完抖动后,可以直观通过点的密集程度判断不同分组的样本量多少、聚集趋势。
- 你贴的示例代码里没有给
geom_jitter()传width/height参数,默认会在分类轴坐标点上下/左右40%的范围内做均匀随机偏移,这个偏移范围可以按需手动调整,调整逻辑完全服务于可视化可读性,和原始数据没有任何关联。 - 对应你给出的饮酒消费示例图:y轴是分类变量「学校」,x轴是离散的饮酒频率评分,原本同一学校、同一评分、同一性别的所有点都会落在完全相同的坐标位置,加抖动后才能看出每个分组的样本量规模——比如哪个评分段的人最多、不同性别的占比大概是多少。
解读注意事项
- 读这类抖动散点图的时候,只看整体密度、分布范围、分组占比趋势就够了,绝对不要解读点和点之间在抖动方向上的距离:比如你不能说同一学校同一饮酒评分下,两个点在y轴方向离得远就代表两个样本有什么属性差异,这个距离完全是随机生成的,不设置随机种子的前提下,每次运行代码生成的图里点的位置都会变。
- 如果你需要点的偏移位置本身也承载信息,可以替换成蜂群图类的几何对象(比如
ggbeeswarm包的geom_beeswarm()),这类函数会按固定规则排布点的位置,在避免重叠的同时让偏移方向对应数据维度,但默认的geom_jitter()不具备这个特性。
对应可视化实现代码:
# 分面可视化 # 按学校分组的工作日饮酒消费情况 DFV1 <- ggplot(data.source1, aes(x=dalc, y=school, color=sex))+ geom_jitter(alpha=0.7)+ scale_colour_manual(values=c("#ff7f50", "#468499"))+ theme_bw()+ xlab("工作日饮酒消费量")+ ylab("学校")+ ggtitle("不同学校、不同性别群体的工作日饮酒消费分布") # 按学校分组的周末饮酒消费情况 DFV2 <- ggplot(data.source1, aes(x=walc, y=school, color=sex))+ geom_jitter(alpha=0.7)+ scale_colour_manual(values=c("#ff7f50", "#468499"))+ theme_bw()+ xlab("周末饮酒消费量")+ ylab("学校")+ ggtitle("不同学校、不同性别群体的周末饮酒消费分布") # 拼接子图(需要提前加载gridExtra包) grid.arrange(DFV1,DFV2, nrow=2)
内容的提问来源于stack exchange,提问作者ALOtto95
相关产品推荐
相关产品推荐

