ETE (Environment for Tree Exploration) toolkit for phylogenetic and hierarchical tree analysis; use it when you need to parse/manipulate Newick/NHX trees, detect duplication/speciation events, integrate NCBI taxonomy, and render publication-quality figures.
69
85%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
ete3 (recommended: >=3.1.0)PyQt5 (e.g., >=5.15)python3-pyqt5.qtsvg on Debian/Ubuntu)The following example is designed to be runnable end-to-end (it uses an in-memory Newick string and does not require external files).
# pip install ete3
from ete3 import Tree, TreeStyle, NodeStyle
# 1) Load a tree (Newick)
nw = "((A:0.1,B:0.2)90:0.3,(C:0.2,D:0.4)70:0.1);"
t = Tree(nw, format=1)
# 2) Basic stats
print("Leaves:", len(t))
print("Total nodes:", sum(1 for _ in t.traverse()))
# 3) Midpoint rooting
mid = t.get_midpoint_outgroup()
t.set_outgroup(mid)
# 4) Prune to taxa of interest (preserve branch lengths)
t.prune(["A", "C", "D"], preserve_branch_length=True)
# 5) Style nodes (color internal nodes by support)
ts = TreeStyle()
ts.show_leaf_name = True
ts.show_branch_support = True
for n in t.traverse():
st = NodeStyle()
if n.is_leaf():
st["fgcolor"] = "blue"
st["size"] = 8
else:
# ETE stores internal support in n.support when present
st["fgcolor"] = "darkgreen" if getattr(n, "support", 0) >= 80 else "red"
st["size"] = 5
n.set_style(st)
# 6) Render (PDF/SVG/PNG supported depending on your environment)
t.render("example_tree.pdf", tree_style=ts)
print("Wrote: example_tree.pdf")ETE uses a format integer to control how node attributes are interpreted when reading/writing Newick. Common patterns:
format=0: flexible default (often includes branch lengths)format=1: includes internal node namesformat=2: includes support/bootstrap valuesformat=5: internal node names + branch lengthsformat=8: name + distance + support (maximal common usage)format=9: leaf names onlyformat=100: topology onlyExample:
from ete3 import Tree
t = Tree("tree.nw", format=1)
t.write(outfile="out.nw", format=5)NHX is used to store custom per-node features. When writing, specify which features to serialize:
t.write(outfile="tree.nhx", features=["taxid", "habitat", "lineage"])get_midpoint_outgroup() to select an outgroup that balances path lengths.preserve_branch_length=True to avoid distorting distances in phylogenetic contexts.For gene trees, PhyloTree supports event labeling on internal nodes (commonly:
evoltype == "D" for duplicationevoltype == "S" for speciation)A typical workflow is:
Tree.robinson_foulds(other_tree) returns:
rf: RF distance (number of differing bipartitions)max_rf: maximum possible RF given shared leavesNormalized RF is typically computed as rf / max_rf (when max_rf > 0).
f5ef65b
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.