绘制两组人群中4个二元基因变量的突变频率对比图
解决方案
要实现每个基因在两个人群中的突变百分比对比图,需要先把宽格式的数据集转换为长格式,再计算突变率,最后用ggplot绘制分组柱状图。具体步骤如下:
1. 数据预处理(转换格式+计算突变百分比)
首先加载tidyverse包(包含dplyr和tidyr,用于数据处理),将宽格式数据转为长格式,并按人群和基因分组计算突变百分比:
library(tidyverse) # 假设你的数据集列包含:人群列(比如叫group,值为TPLL/LNH-T)、JAK1、JAK3、IL2R、STAT5B ds_processed <- ds %>% # 将4个基因列转为长格式 pivot_longer( cols = c(JAK1, JAK3, IL2R, STAT5B), names_to = "gene", # 新列名:基因名称 values_to = "mutation" # 新列名:突变状态(0/1) ) %>% # 按人群和基因分组,计算突变百分比 group_by(group, gene) %>% summarise( mutation_rate = mean(mutation) * 100, # 0/1的均值就是突变比例,转百分比 .groups = "drop" # 取消分组 )
注意:如果你的人群列名不是group,请替换为实际列名(比如cohort)。
2. 绘制对比柱状图
用ggplot绘制并列的分组柱状图,直接展示每个基因在两个人群中的突变百分比:
ggplot(ds_processed, aes(x = gene, y = mutation_rate, fill = group)) + # 绘制并列柱子,position_dodge实现并列效果 geom_col(position = position_dodge(width = 0.8), width = 0.7, color = "black") + # 在柱子上方添加百分比标签 geom_text( aes(label = sprintf("%.1f%%", mutation_rate)), position = position_dodge(width = 0.8), vjust = -0.5, # 标签位置向上偏移 size = 3.5 ) + # 设置图表标签 labs( title = "各基因在不同人群中的突变百分比", x = "基因名称", y = "突变百分比 (%)", fill = "人群" ) + # 优化主题 theme_minimal() + theme(plot.title = element_text(hjust = 0.5)) # 标题居中
代码说明
pivot_longer:把原本分散在多列的基因数据整合到一列,让ggplot可以按基因分组展示。mean(mutation)*100:因为突变状态是0(未突变)和1(突变),均值即为突变比例,乘以100得到百分比。position_dodge(width = 0.8):让同一基因对应的两个人群柱子并列显示,避免重叠。geom_text:添加百分比标签,让数值更直观。
内容的提问来源于stack exchange,提问作者IlyLemon
相关产品推荐
相关产品推荐

