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 |
-I | MCL 聚类膨胀系数 | 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 | 未安装 DIAMOND | conda 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/ # 统计摘要