You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用ggplot2绘制单面板分组垂直散点图展示数据分布

解决方法

你不需要使用facet_wrap(),这个函数是用来生成多面板图表的,直接移除它就能在单个面板里展示所有分组的散点。针对同组数据点可能重叠的问题,提供以下几种实现方案:

1. 基础分组散点图(无优化)

直接移除分面代码,即可得到单个面板的分组散点:

library(ggplot2)
dat <- data.frame(
  values = c(2, 5, 6, 7, 4, 6, 8, 9, 6, 8, 10, 13),
  race = c("black", "black", "black", "black", 
           "white", "white", "white", "white",
           "Hispanic", "Hispanic", "Hispanic", "Hispanic")
)

p <- ggplot(data = dat, aes(x = race, y = values)) + geom_point()
p

注意:这种方式下,同组内y值相同的点会完全重叠,无法直观看到数据数量。

2. 带抖动的散点图(推荐)

使用geom_jitter()或给geom_point()添加位置参数,让同组点在x轴方向轻微分散,避免重叠:

# 方式一:直接调用geom_jitter
ggplot(dat, aes(x = race, y = values)) + 
  geom_jitter(width = 0.2,  # 控制x方向抖动幅度,可按需调整
              height = 0)   # y方向保持垂直对齐,不抖动

# 方式二:给geom_point指定position参数
ggplot(dat, aes(x = race, y = values)) + 
  geom_point(position = position_jitter(width = 0.2, height = 0))

width参数可灵活调整:数值越小,点越靠近分组中心;数值越大,分散程度越高。

3. 固定排列的分组散点(无随机抖动)

如果想要更规整的排列,可手动给每个组内的点添加偏移量:

# 给每组内的点添加序号,计算偏移值
dat$id <- ave(dat$values, dat$race, FUN = seq_along)
ggplot(dat, aes(x = as.numeric(race) + (id - mean(id))*0.1, y = values)) +
  geom_point() +
  scale_x_continuous(breaks = 1:3, labels = unique(dat$race))

这种方式的点排列整齐,不会有随机抖动的不确定性。

内容的提问来源于stack exchange,提问作者Raf_97

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 18:12:06