如何使用R语言ggplot绘制目标样式的分组散点图?
ggplot2实现病例/对照分组b值散点图方法
你手里的宽表格式需要先转成ggplot适配的长格式,再叠加散点层和分组统计层就能快速出图,步骤如下:
- 数据预处理
原始df结构为每行对应1个个体,包含1列存储case/control分组信息(示例代码假设列名为group),其余列均为不同的b值指标。先用tidyr把宽表转成长表,每行对应单个个体的单个b值观测:
# 加载需要的包 library(ggplot2) library(tidyr) library(dplyr) # 宽转长 df_long <- df %>% pivot_longer( cols = -group, names_to = "b_type", values_to = "b_value" )
- 核心绘图代码
用geom_jitter做分组散点避免点重叠,stat_summary绘制每组的均值/中位统计线,和你示例图的样式对齐:
ggplot(df_long, aes(x = b_type, y = b_value, color = group)) + # 分组散点,自动对齐分组位置、加轻微抖动避免重叠 geom_jitter( position = position_jitterdodge(jitter.width = 0.15, dodge.width = 0.75), alpha = 0.6, size = 1.1 ) + # 绘制每组的统计横线,默认用均值,要换中位数就把fun参数改成median stat_summary( fun = mean, geom = "crossbar", width = 0.5, position = position_dodge(width = 0.75), aes(fill = group), color = "black", linewidth = 0.4 ) + # 自定义配色,和示例的红蓝分组匹配 scale_color_manual(values = c("case" = "#E41A1C", "control" = "#377EB8")) + scale_fill_manual(values = c("case" = "#E41A1C", "control" = "#377EB8"), guide = "none") + # 坐标轴、图例设置 labs(x = "b值指标", y = "b值", color = "分组") + theme_classic() + theme( axis.text.x = element_text(angle = 45, hjust = 1), legend.position = "top" )
小调整提示:如果需要加组间显著性标记,可以加载
ggsignif包后叠加geom_signif()层设置标记位置和显著性阈值;散点透明度、大小、抖动幅度都可以通过对应参数微调,适配你的数据分布。
内容的提问来源于stack exchange,提问作者Gleyson Carvalho
相关产品推荐
相关产品推荐

