[ PROMPT_NODE_26556 ]
Etetoolkit 工作流
[ SKILL_DOCUMENTATION ]
# ETE Toolkit 常用工作流
本文档提供了使用 ETE Toolkit 执行常见任务的完整工作流。
## 目录
1. [基础树操作](#basic-tree-operations)
2. [系统发育分析](#phylogenetic-analysis)
3. [树比较](#tree-comparison)
4. [分类学集成](#taxonomy-integration)
5. [聚类分析](#clustering-analysis)
6. [树可视化](#tree-visualization)
---
## 基础树操作
### 加载与探索树
python
from ete3 import Tree
# 从文件加载树
tree = Tree("my_tree.nw", format=1)
# 显示 ASCII 表示
print(tree.get_ascii(show_internal=True))
# 获取基础统计信息
print(f"叶子节点数: {len(tree)}")
print(f"总节点数: {len(list(tree.traverse()))}")
print(f"树深度: {tree.get_farthest_leaf()[1]}")
# 列出所有叶子节点名称
for leaf in tree:
print(leaf.name)
### 提取与保存子树
python
from ete3 import Tree
tree = Tree("full_tree.nw")
# 获取特定节点为根的子树
node = tree.search_nodes(name="MyNode")[0]
subtree = node.copy()
# 保存子树到文件
subtree.write(outfile="subtree.nw", format=1)
# 提取单系进化枝
species_of_interest = ["species1", "species2", "species3"]
ancestor = tree.get_common_ancestor(species_of_interest)
clade = ancestor.copy()
clade.write(outfile="clade.nw")
### 剪枝至特定分类群
python
from ete3 import Tree
tree = Tree("large_tree.nw")
# 仅保留感兴趣的分类群
taxa_to_keep = ["taxon1", "taxon2", "taxon3", "taxon4"]
tree.prune(taxa_to_keep, preserve_branch_length=True)
# 保存剪枝后的树
tree.write(outfile="pruned_tree.nw")
### 树重根
python
from ete3 import Tree
tree = Tree("unrooted_tree.nw")
# 方法 1: 按外群重根
outgroup = tree & "Outgroup_species"
tree.set_outgroup(outgroup)
# 方法 2: 中点重根
midpoint = tree.get_midpoint_outgroup()
tree.set_outgroup(midpoint)
# 保存重根后的树
tree.write(outfile="rooted_tree.nw")
### 使用自定义数据标注节点
python
from ete3 import Tree
tree = Tree("tree.nw")
# 基于元数据向节点添加特征
metadata = {
"species1": {"habitat": "marine", "temperature": 20},
"species2": {"habitat": "freshwater", "temperature": 15},
}
for leaf in tree:
if leaf.name in metadata:
leaf.add_features(**metadata[leaf.name])
# 查询标注特征
for leaf in tree:
if hasattr(leaf, "habitat"):
print(f"{leaf.name}: {leaf.habitat}, {l"