跳转至

OrthoFinder — 基因组级别直系同源基因推断工具


一句话说明

OrthoFinder 输入多个物种的蛋白质组(FASTA),自动做全对全 BLAST/Diamond 比对,再用图聚类算法推断哪些基因是"来自共同祖先的直系同源基因(orthologs)",并给出基因家族(orthogroups)、物种进化树和基因丢失/复制事件。白话理解:多物种基因组"亲属关系"鉴定器。


安装与配置

# 方法1:conda 安装(推荐,自动解决 DIAMOND/MCL 依赖)
conda install -c bioconda orthofinder  # 安装 OrthoFinder 及全部依赖

# 确认版本(当前稳定版 v2.5.5)
orthofinder --version  # 输出版本号

# 方法2:下载预编译包
wget https://github.com/davidemms/OrthoFinder/releases/latest/download/OrthoFinder.tar.gz
tar -xzf OrthoFinder.tar.gz   # 解压
./OrthoFinder/orthofinder -h  # 测试运行

# 确保 DIAMOND 已安装(默认比对工具)
conda install -c bioconda diamond  # 安装 DIAMOND
diamond --version  # 确认版本 ≥ 2.1

核心用法

最简单的运行命令

# 把所有物种的蛋白质组(.faa/.fa/.fasta)放到一个目录
ls proteomes/
# Human.faa  Mouse.faa  Zebrafish.faa  ...

# 运行 OrthoFinder(最常用命令)
orthofinder \
  -f proteomes/ \         # 输入目录,包含所有蛋白质组 FASTA
  -t 16 \                 # 使用16个线程
  -a 4 \                  # 分析阶段4线程
  -o results/             # 输出目录(不存在则自动创建)

使用预计算比对结果(节省时间)

# 第一次运行完后,如果想加一个新物种,不用重新跑全部比对
orthofinder \
  -b results/OrthoFinder/Results_XXX/WorkingDirectory/ \  # 之前结果目录
  -f new_proteome/                                         # 新物种 FASTA
  -t 16

参数详解

参数含义推荐值
-f输入蛋白质组目录必填
-o输出目录建议指定
-t比对线程数CPU 核心数
-a分析线程数4-8
-S比对工具diamond(默认)/ blast
-M聚类方法msa(含进化树,推荐)
-A多序列比对工具mafft(默认)
-T建树工具fasttree(默认)/ iqtree
-IMCL 聚类膨胀系数1.5(默认,值越大组越多越小)
-n结果目录名后缀自定义标识符

实战案例

案例:分析10个细菌基因组的直系同源基因

# 准备目录结构
mkdir -p bacteria_proteomes
# 把 10 个基因组的蛋白质序列放进去
# 文件命名规则:物种名.faa(避免空格和特殊字符)

# 运行分析(使用 IQ-TREE 建高质量物种树)
orthofinder \
  -f bacteria_proteomes/ \   # 输入目录
  -t 32 \                    # 32线程做比对
  -a 8 \                     # 8线程做分析
  -M msa \                   # 用多序列比对模式(会建基因树)
  -T iqtree \                # 用 IQ-TREE 建进化树(更准确)
  -o bacteria_ortho/ \       # 输出目录
  -n bacteria_run1           # 结果标识名

案例:解读结果文件

# 结果主目录
ls bacteria_ortho/OrthoFinder/Results_bacteria_run1/

# 关键输出文件
# Orthogroups/Orthogroups.tsv
# → 每行是一个 orthogroup,列是物种,格子是该物种的基因 ID
# 核心直系同源组(所有物种都有的)在 Orthogroups/Orthogroups_SingleCopyOrthologues.txt

# 物种进化树
# Species_Tree/SpeciesTree_rooted.txt       → Newick 格式,可直接用 ggtree 画
# Species_Tree/SpeciesTree_rooted_node_labels.txt → 带节点标签

# 基因树
# Gene_Trees/OG0000001_tree.txt  → 每个 orthogroup 的基因树

# 统计摘要
# Comparative_Genomics_Statistics/Statistics_Overall.tsv
# → orthogroup 总数、单拷贝比例、物种特有 OG 数等

# 用 Python 读取 Orthogroups 表
python3 << 'EOF'
import pandas as pd

# 读取 orthogroups 矩阵
og = pd.read_csv(
    "bacteria_ortho/OrthoFinder/Results_bacteria_run1/Orthogroups/Orthogroups.tsv",
    sep="\t",       # 制表符分隔
    index_col=0     # 第一列(OG编号)作为行索引
)
print(f"总 Orthogroups 数: {len(og)}")                    # 总基因家族数
print(f"物种数: {og.shape[1]}")                           # 列数=物种数

# 找核心直系同源组(所有物种都有且单拷贝)
single_copy = og.apply(lambda row: all(
    row.notna() and len(str(x).split(", ")) == 1 for x in row
), axis=1)
print(f"单拷贝核心 OGs: {single_copy.sum()}")             # 单拷贝 OG 数量
EOF

常见报错与解决

报错原因解决方法
diamond not found未安装 DIAMONDconda install -c bioconda diamond
Sequences in fasta file not protein输入了 DNA 序列确认输入为蛋白质序列(氨基酸字母)
MCL 聚类失败内存不足减少物种数或增加内存;用 -S blast 减少内存
物种树根部异常外群物种缺失或距离太远加入已知外群物种;检查蛋白质组质量
运行极慢物种/基因数过多先用 -S diamond_ultra_sens 提速;增加 -t 线程数

速查表

# 安装
conda install -c bioconda orthofinder

# 基本运行
orthofinder -f proteomes/ -t 16 -o results/

# 加快速度(用 DIAMOND 超灵敏模式)
orthofinder -f proteomes/ -t 32 -S diamond_ultra_sens

# 只做比对,跳过建树(更快)
orthofinder -f proteomes/ -t 32 -M dendroblast

# 关键输出文件位置
results/OrthoFinder/Results_XXX/
├── Orthogroups/Orthogroups.tsv              # 核心结果矩阵
├── Orthogroups/Orthogroups_SingleCopyOrthologues.txt  # 单拷贝列表
├── Species_Tree/SpeciesTree_rooted.txt      # 物种树
├── Gene_Trees/                              # 各 OG 基因树
└── Comparative_Genomics_Statistics/         # 统计摘要