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

求助:Roary输出.Rtab基因数据清洗及韦恩图绘制方案

处理Roary输出的.Rtab文件并绘制韦恩图

一、用Awk预处理数据(清理+统计)

通过Awk过滤掉所有菌株均无该基因(全0)的行,同时统计各基因分类的数量:

awk '
NR==1 {next}                # 跳过表头行
$2+$3+$4 == 0 {next}        # 删除三个菌株均为0的行
{
    pattern = $2""$3""$4    # 拼接三个菌株的存在状态为标识
    count[pattern]++
}
END {
    # 按需求输出各分类的基因数
    print "核心基因(111):", count["111"]
    print "Accessory a+b(110):", count["110"]
    print "Accessory b+c(011):", count["011"]
    print "Accessory a+c(101):", count["101"]
    print "unique a(100):", count["100"]
    print "unique b(010):", count["010"]
    print "unique c(001):", count["001"]
}' input.Rtab > gene_counts.txt

执行后会生成gene_counts.txt文件,包含各分类的基因数量统计结果。

二、用RStudio绘制韦恩图

提供两种实现方式,可根据习惯选择:

方式1:基于Awk统计结果绘制

# 安装依赖包(首次运行需执行)
install.packages("VennDiagram")

# 加载包
library(VennDiagram)

# 读取统计数据
counts <- read.table("gene_counts.txt", sep=":", stringsAsFactors=FALSE)
counts$V2 <- as.integer(trimws(counts$V2))  # 清理空格并转为整数

# 提取各分类数值
core <- counts[counts$V1 == "核心基因(111)", "V2"]
a_b <- counts[counts$V1 == "Accessory a+b(110)", "V2"]
b_c <- counts[counts$V1 == "Accessory b+c(011)", "V2"]
a_c <- counts[counts$V1 == "Accessory a+c(101)", "V2"]
unique_a <- counts[counts$V1 == "unique a(100)", "V2"]
unique_b <- counts[counts$V1 == "unique b(010)", "V2"]
unique_c <- counts[counts$V1 == "unique c(001)", "V2"]

# 生成韦恩图
venn.diagram(
    x = list(
        StrainA = rep(1, unique_a + a_b + a_c + core),
        StrainB = rep(1, unique_b + a_b + b_c + core),
        StrainC = rep(1, unique_c + a_c + b_c + core)
    ),
    filename = "gene_venn.png",
    fill = c("#FF6B6B", "#4ECDC4", "#45B7D1"),
    alpha = 0.5,
    cat.cex = 1.1,
    main = "基因存在/缺失韦恩图",
    main.cex = 1.3
)

运行后会在工作目录生成gene_venn.png韦恩图文件。

方式2:直接处理原始.Rtab文件

无需Awk预处理,直接在R中完成数据清理、统计和绘图:

# 安装依赖包(首次运行需执行)
install.packages("VennDiagram")

# 加载包
library(VennDiagram)

# 读取原始.Rtab文件
gene_data <- read.table("input.Rtab", header = TRUE, stringsAsFactors = FALSE)

# 过滤全0行
filtered_data <- gene_data[rowSums(gene_data[, 2:4]) != 0, ]

# 绘制韦恩图
venn.diagram(
    x = list(
        StrainA = which(filtered_data$StrainA == 1),
        StrainB = which(filtered_data$StrainB == 1),
        StrainC = which(filtered_data$StrainC == 1)
    ),
    filename = "gene_venn_direct.png",
    fill = c("#E74C3C", "#3498DB", "#2ECC71"),
    alpha = 0.6,
    cat.pos = c(-30, 30, 180),
    cat.dist = 0.12,
    main = "Roary 基因存在/缺失分析"
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 10:54:56