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

如何使用ggplot2基于数据框多列绘制分组geom_bar对比各ID的gene1、gene2计数

解决方案

基于R的ggplot2可以快速实现你要的并排柱状图,完整步骤如下:

1. 数据预处理

首先按样本ID分组,分别统计两种方法的有效检出突变数(排除NA值),再转换为ggplot要求的长表格式:

# 加载所需包
library(dplyr)
library(tidyr)
library(ggplot2)

# 你提供的原始数据赋值给df
df <- structure(list(ID = c(4602, 4602, 4602, 5095, 5095, 5095, 5095, 
4649, 4649, 4649, 5069, 5069, 5069, 5146, 5132, 5132, 5132, 5132, 
5132, 5132, 4297, 4297, 4297, 4297, 4297, 4345, 4345, 4345, 4345, 
4345, 4356, 4356, 4356, 4356, 4385, 4385, 4385, 4385, 4385, 4385, 
4437, 4437, 4437, 4437, 4437, 4437, 4442, 4442, 4442, 4442, 4442, 
4479, 4479, 4479, 4479, 4479, 4479, 4479, 4479, 4479, 4479, 4479, 
4479, 4479, 4479, 4479, 4487, 4487, 4487, 4487, 4487, 4487, 4537, 
4537, 4537, 4537, 4537, 4537, 4621, 4621, 4621, 4621, 4621, 4621, 
4621, 4624, 4624, 4624, 4624, 4624, 4665, 4736, 4736, 4736, 4736, 
4736, 4895, 4895, 4895, 4895, 4895, 4903, 4903, 4903, 4903, 4691, 
4691, 4691, 4691, 4261, 4261, 4261, 4261, 4394, 4394, 4394, 4394, 
4424, 4424, 4424, 4424, 4943, 4943, 4943, 5073, 5169, 5169), 
    gene1 = c("TET2", "TP53", "TET2", "ASXL1", "DNMT3A", "NPM1", 
    "PTPN11", "TP53", "TP53", "TET2", "DNMT3A", "TET2", "TET2", 
    "negative", "JAK2", "ASXL1", "BRAF", "CBL", "TET2", "TET2", 
    "DNMT3A", "IDH1", "NPM1", "CREBBP", "FLT3", "DNMT3A", "FLT3", 
    "NPM1", "BCOR", "KIT", "DNMT3A", "IDH1", "NRAS", "BCOR", 
    "KRAS", "NPM1", "PTPN11", "ETV6", "PHF6", "TET2", "DNMT3A", 
    "KRAS", "NPM1", "WT1", "TET2", "WT1", "DNMT3A", "FLT3", "NPM1", 
    "NRAS", "WT1", "DNMT3A", "IDH2", "NPM1", "SRSF2", "ATRX", 
    "CUX1", "CUX1", "FLT3", "GNAS", "PHF6", "PIGA", "PIGA", "PRPF40B", 
    "PTPN11", "TET2", "IDH1", "IDH2", "RUNX1", "U2AF1", "TET2", 
    "TP53", "DNMT3A", "IDH2", "ATRX", "GATA2", "STAG2", "TP53", 
    "IDH2", "SRSF2", "ASXL1", "GATA1", "KDM6A", "STAG2", "TP53", 
    "IDH2", "JAK2", "SRSF2", "ASXL1", "RIT1", "KRAS", "NPM1", 
    "NRAS", "NRAS", "BCOR", "MYD88", "FLT3", "NPM1", "NRAS", 
    "TET2", "TET2", "DNMT3A", "IDH1", "NPM1", "CREBBP", "DNMT3A", 
    "IDH1", "IDH2", "NPM1", "FLT3", "FLT3", "GATA2", "SH2B3", 
    "FLT3", "NPM1", "KDM6A", "SMC1A", "IDH2", "SRSF2", "ASXL2", 
    "RUNX1", "IDH2", "JAK2", "NPM1", "JAK2", "SRSF2", "STAG2"
    ), gene2 = c("TET2", "TP53", "TET2", "ASXL1", "DNMT3A", NA, 
    "PTPN11", "TP53", "TP53", "TET2", "DNMT3A", NA, "TET2", "PTEN", 
    NA, NA, "BRAF", "CBL", "TET2", "TET2", "JAK2", "SRSF2", NA, 
    "DNMT3A", "IDH1", "NPM1", NA, "FLT3", "DNMT3A", "FLT3", "NPM1", 
    NA, NA, "DNMT3A", "IDH1", "NRAS", "BCOR", "KRAS", "NPM1", 
    "PTPN11", "ETV6", "PHF6", "TET2", "DNMT3A", "KRAS", "NPM1", 
    NA, "TET2", NA, "DNMT3A", "FLT3", "NPM1", "NRAS", NA, NA, 
    "IDH2", "NPM1", "SRSF2", NA, "CALR", NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, "IDH1", "IDH2", "RUNX1", "U2AF1", "TET2", 
    NA, "DNMT3A", "IDH2", NA, NA, NA, NA, "IDH2", "SRSF2", "ASXL1", 
    NA, NA, "KMT2D", "TP53", "IDH2", "JAK2", "SRSF2", "ASXL1", 
    NA, "KRAS", "NPM1", "NRAS", "NRAS", NA, NA, "FLT3", "NPM1", 
    "NRAS", "TET2", "TET2", "DNMT3A", "IDH1", "NPM1", "CREBBP", 
    "DNMT3A", "IDH1", "IDH2", "NPM1", "FLT3", "FLT3", NA, NA, 
    "FLT3", "NPM1", NA, "SMC1A", "IDH2", "SRSF2", NA, "RUNX1", 
    "IDH2", "JAK2", "NPM1")), class = "data.frame", row.names = c(NA, 
-127L))

# 汇总计数并转换格式
count_df <- df %>%
  group_by(ID) %>%
  summarise(
    gene1 = sum(!is.na(gene1)),
    gene2 = sum(!is.na(gene2)),
    .groups = "drop"
  ) %>%
  pivot_longer(cols = -ID, names_to = "检测方法", values_to = "检出突变数") %>%
  mutate(ID = as.factor(ID)) # 转因子避免x轴被识别为连续数值

2. 绘制并排柱状图

ggplot(count_df, aes(x = ID, y = 检出突变数, fill = 检测方法)) +
  # position_dodge控制柱子并排显示
  geom_col(position = position_dodge(0.8), width = 0.7) +
  labs(x = "样本ID", y = "突变检出数", title = "两种检测方法突变检出数对比") +
  theme_bw() +
  # x轴标签旋转45度避免重叠
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

效果说明

  • 每个样本ID对应两根柱子,左侧为标准方法gene1的检出计数,右侧为待对比工具gene2的检出计数
  • 自动排除了gene2中的NA值,统计结果和你示例的样本5095检出3和2的结果完全匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 18:18:02