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

如何用ggplot2编写入门级散点图代码:ADHD与SDQ数据分布可视化

解决ggplot2中分类变量与数值变量散点图的点重叠问题

你遇到的问题本质是:ADHD是二元分类变量(仅"是"/"否"两个取值),把它放在y轴时,所有样本点都会集中在两个水平线上,导致点完全重叠,看不到数据分布。下面给你几个ggplot2入门级的解决方法:

方法1:给分类变量添加抖动(最常用)

用geom_jitter()替代geom_point(),它会给每个点添加微小的随机偏移,既能保留单个样本的信息,又能避免点完全重叠。可以通过height参数控制y轴方向的抖动幅度(别设太大,不然会偏离分类标签),width控制x轴的抖动幅度:

# 假设你的数据框名为df,sdq是数值列,adhd是分类列(建议先转成因子)
library(ggplot2)

# 先把adhd转成因子(确保ggplot识别为分类变量)
df$adhd <- factor(df$adhd, levels = c("否", "是"))

ggplot(df, aes(x = sdq, y = adhd)) +
  geom_jitter(height = 0.1, width = 0.2, alpha = 0.6) + # alpha设置透明度,重叠处更清晰
  labs(x = "SDQ测试得分", y = "ADHD诊断结果") +
  theme_bw()

方法2:箱线图+散点(兼顾整体分布与单个样本)

如果想同时看ADHD两组的SDQ得分分布趋势(中位数、四分位距)和单个样本的位置,可以把箱线图和抖动散点结合,且把分类变量放x轴更符合常规可视化逻辑:

ggplot(df, aes(x = adhd, y = sdq)) +
  geom_boxplot(width = 0.3, fill = "lightblue", alpha = 0.5) +
  geom_jitter(height = 0, width = 0.2, color = "darkred", size = 1.5) +
  labs(x = "ADHD诊断结果", y = "SDQ测试得分") +
  theme_bw()

方法3:调整坐标轴映射(不推荐,但入门可尝试)

如果你坚持把ADHD放在y轴,也可以把分类变量转成数值("否"=1,"是"=2),再添加抖动,但不如前两种直观:

df$adhd_num <- ifelse(df$adhd == "否", 1, 2)

ggplot(df, aes(x = sdq, y = adhd_num)) +
  geom_jitter(height = 0.1, width = 0.2) +
  scale_y_continuous(breaks = c(1,2), labels = c("否", "是")) + # 把数值轴转成原分类标签
  labs(x = "SDQ测试得分", y = "ADHD诊断结果") +
  theme_bw()

关键提示

  • 优先选方法1或2,尤其是方法2,更符合学术可视化的常规逻辑,也更容易解读两组数据的差异;
  • 用alpha参数降低点的透明度,能更清晰地看到重叠区域的点密度;
  • 提前把分类变量转成因子,可以避免ggplot自动按字母顺序排序分类标签。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 01:35:02