系统发育树

关于系统发育树

系统发育树(也称为系统发生图或支序图)展示了一组物种、基因或序列的推断进化历史。内部节点代表假设的共同祖先;末端节点代表已观测的分类群;枝长编码进化距离或分化时间。进化生物学家、分子生态学家和临床微生物学家使用系统发育树来重建生命史、追踪病原体爆发,以及理解基因家族的进化过程。

Schematex 接受 **Newick 格式**的输入——这是 PAUP*、IQ-TREE、RAxML、BEAST 以及几乎所有系统发育学程序使用的通用交换标准——并通过 **NHX 注释**扩展了对自举值和支系元数据的支持。对于手写树,也支持基于缩进的 DSL。本页记录了解析器目前接受的内容。

phylogenetic·§ Newick / NHX
↘ preview
100%
Phylogenetic Tree: Vertebrate Evolution Phylogenetic tree with 12 taxa, phylogram mode, circular layout Vertebrate Evolution Primates Rodents Carnivora Cetacea Human Chimp Gorilla Mouse Rat Dog Cat Tiger Whale Dolphin Salmon Zebrafish 0.2 substitutions/site
UTF-8 · LF · 7 lines · 657 chars✓ parsed·0.7 ms·9.5 KB SVG

1. 第一棵系统发育树

最小可用的树:四个分类群,两个支系。

phylogenetic·§ Newick / NHX
↘ preview
100%
Phylogenetic Tree: Vertebrates Phylogenetic tree with 4 taxa, phylogram mode, rectangular layout Vertebrates Human Chimp Dog Cat 0.1
UTF-8 · LF · 2 lines · 84 chars✓ parsed·0.3 ms·4.3 KB SVG

三条规则涵盖了 80% 的使用场景:

  1. phylo 开头,后面可选择性加上引号标题和方括号属性。
  2. newick: 格式中提供树的拓扑结构——标准 Newick 字符串,加引号,单行。末尾的 ; 可选。
  3. 可选地在 newick 行下方定义支系高亮组和比例尺标签。

注释必须以 # 开头并独立成行。不支持行尾内联注释。


2. 输入格式

2.1 Newick 格式

Newick 是主要输入。完整语法如下:

(A,B,(C,D));                         # topology only
(A:0.1,B:0.2,(C:0.3,D:0.4):0.5);    # with branch lengths
((A:0.1,B:0.2):0.05[&&NHX:B=98],(C,D):0.08);  # NHX bootstrap
('Homo sapiens':0.1,'Mus musculus':0.2);        # quoted names with spaces

枝长在节点名称后跟冒号。内部节点支持值可以用普通括号 [95] 或 NHX [&&NHX:B=95] 表示。

phylogenetic·§ Newick / NHX
↘ preview
100%
Phylogenetic Tree: Newick examples Phylogenetic tree with 4 taxa, phylogram mode, rectangular layout Newick examples A B C D 98 87 0.1
UTF-8 · LF · 2 lines · 98 chars✓ parsed·0.3 ms·4.6 KB SVG

解析器接受的 Newick 规则:

特性语法备注
叶节点名称AHomo_sapiens不能有空格——使用 _ 或加引号
带引号的叶节点名称'Homo sapiens'单引号;'' 表示内部的字面引号
枝长名称后的 :0.035浮点数;可选
内部节点名称(A,B)ancestor在闭合 ) 之后
自举值(普通)(A,B)[95]括号中的整数或浮点数
自举值(NHX)(A,B)[&&NHX:B=95]B= 字段;其他 NHX 字段被存储但不渲染
分号末尾的 ;可选——解析器会去除
多分叉(A,B,C)超过 2 个子节点

2.2 缩进 DSL

对于手写或小型树,Schematex 提供基于缩进的替代方案,比原始 Newick 更易于阅读和编辑:

phylogenetic·§ Newick / NHX
↘ preview
100%
Phylogenetic Tree: Vertebrates (indent DSL) Phylogenetic tree with 1 taxa, phylogram mode, rectangular layout Vertebrates (indent DSL) root 0.2 substitutions/site
UTF-8 · LF · 9 lines · 145 chars✓ parsed·0.9 ms·3.1 KB SVG

缩进 DSL 规则:

语法含义
Name: length带枝长的叶节点
: length带枝长的无名内部节点
Name无枝长的叶节点(支序图)
Name [N]带支持值 N 的节点
更深的缩进上方缩进较浅节点的子节点
#注释,忽略

: 结尾且不含空格的第一行会触发缩进树模式(如 root:)。冒号前的名称成为根节点标签;下方所有缩进行成为其子节点。


3. 布局

在头部方括号中设置布局:phylo "标题" [layout: rectangular]

布局描述
矩形rectangular默认。L 形枝;根在左,末端在右
斜线slanted从父节点到子节点的对角线;更紧凑
圆形circular根在中心,末端分布在圆周上
无根unrooted等角辐射;强调距离而非祖源

[unrooted] 作为裸标志等同于 [layout: unrooted]

圆形 — 根在中心,末端向外扇形展开。对于分类群较多且有支系高亮的树,视觉效果最突出。

phylogenetic·§ Newick / NHX
↘ preview
100%
Phylogenetic Tree: Vertebrates — circular Phylogenetic tree with 8 taxa, phylogram mode, circular layout Vertebrates — circular Primates Carnivora Human Chimp Gorilla Dog Cat Wolf Salmon Zebrafish 0.2
UTF-8 · LF · 4 lines · 356 chars✓ parsed·0.4 ms·6.5 KB SVG

矩形 — L 形枝;根在左,末端在右。发表图的经典系统发生图形式。

phylogenetic·§ Newick / NHX
↘ preview
100%
Phylogenetic Tree: Bacterial Diversity Phylogenetic tree with 10 taxa, phylogram mode, rectangular layout Bacterial Diversity Ecoli Salmonella Vibrio Bacillus Staph Listeria Myco_tb Myco_leprae Strepto Lactobacillus 98 92 100 0.2 substitutions/site
UTF-8 · LF · 5 lines · 503 chars✓ parsed·0.5 ms·8.4 KB SVG

斜线 — 从父节点到子节点的对角线;比矩形更紧凑,阅读方向相同(从左到右)。

phylogenetic·§ Newick / NHX
↘ preview
100%
Phylogenetic Tree: Vertebrates — slanted Phylogenetic tree with 8 taxa, phylogram mode, slanted layout Vertebrates — slanted Human Chimp Gorilla Dog Cat Wolf Salmon Zebrafish 0.2 substitutions/site
UTF-8 · LF · 5 lines · 347 chars✓ parsed·0.3 ms·5.5 KB SVG

无根 — 等角辐射布局;淡化根节点,强调所有分类群之间的两两距离。

phylogenetic·§ Newick / NHX
↘ preview
100%
Phylogenetic Tree: Vertebrates — unrooted Phylogenetic tree with 8 taxa, phylogram mode, rectangular layout Vertebrates — unrooted Human Chimp Gorilla Dog Cat Wolf Salmon Zebrafish 0.2
UTF-8 · LF · 4 lines · 314 chars✓ parsed·0.3 ms·5.7 KB SVG

4. 模式

在头部用 [mode: …] 设置(或在正文中的 style [mode: …] 行设置)。

模式枝长含义
系统发生图phylogram默认。与进化距离成比例(替换/位点)
支序图cladogram忽略——末端对齐;只有拓扑有意义
年代图chronogram与分化时间成比例;所有末端对齐到"现在"
树状图dendrogram枝长为合并高度——两个簇合并时的距离

年代图需要以时间为单位的枝长,以及头部中的 [mrsd: "YYYY"](最近采样日期),以便渲染器将末端对齐到现在。

phylo "SARS-CoV-2 variants" [mode: chronogram, mrsd: "2023"]
  newick: "((Alpha:0.5,Delta:0.4):0.3,Omicron:0.8);"
  scale "years"

树状图 — 层次聚类的标准输出,而非进化。每个内部节点放置在其合并高度(其两个子簇融合的表型距离),所有叶节点在公共基线对齐,枝为矩形弯折连接器。绘制高度轴以便读出任意两个叶节点首次共享一个簇时的距离。当同一 Newick/缩进树描述聚类结果(基因表达簇、样本相似度、问卷回应组)而非系统发育时,选择此模式。

添加 cut <value> 行可在选定高度处切割树:合并高度低于阈值的每个子树成为一个扁平的簇,各自以不同颜色区分,并在该高度处绘制一条虚线阈值线。这相当于树状图版本的 scipy fcluster——将连续树转换为离散的分组集合。

phylogenetic·§ Newick / NHX
↘ preview
100%
Dendrogram: Gene expression clusters Dendrogram with 5 taxa, dendrogram mode, rectangular layout, cut at 4 into 2 clusters Gene expression clusters A B C D E 0 1 2 3 4 5 cluster distance cut = 4
UTF-8 · LF · 4 lines · 127 chars✓ parsed·1.2 ms·5.6 KB SVG

省略 cut 可显示不带扁平簇着色的原始树状图:

phylogenetic·§ Newick / NHX
↘ preview
100%
Dendrogram: Sample clustering Dendrogram with 5 taxa, dendrogram mode, rectangular layout Sample clustering A B C D E 0 1 2 3 4 5 cluster distance
UTF-8 · LF · 3 lines · 114 chars✓ parsed·0.4 ms·4.7 KB SVG

5. 支系高亮

clade 行用颜色、可选标签和可选高亮模式标记一个单系群。

clade ID = (member1, member2, ...) [color: "#hex", label: "text", highlight: mode]
属性效果
color:十六进制字符串,如 "#1E88E5"枝和/或背景颜色
label:引号字符串在右边距显示支系标签
highlight:branchbackgroundbothbranch 为线着色;background 为区域着色;both 两者都做

成员是 Newick 字符串中的末端(叶节点)ID。渲染器计算列出末端的最近共同祖先(MRCA),并高亮整个以此为根的子树。

phylogenetic·§ Newick / NHX
↘ preview
100%
Phylogenetic Tree: Mammal clades Phylogenetic tree with 7 taxa, phylogram mode, rectangular layout Mammal clades Primates Human Chimp Gorilla Mouse Dog Cat Tiger 0.2
UTF-8 · LF · 4 lines · 346 chars✓ parsed·0.4 ms·6.7 KB SVG

6. 比例尺与外群

比例尺: scale "标签" — 在底部添加比例尺。标签描述单位(如 "substitutions/site""Mya")。支序图模式下枝长无意义,可省略。

外群: outgroup: taxonId — 记录外群供文档参考;渲染器可能用它来视觉标记外群分类群。

phylo "Vertebrates"
  newick: "((Human:0.1,Chimp:0.08):0.03,Lamprey:0.8);"
  outgroup: Lamprey
  scale "substitutions/site"

7. 头部属性参考

所有选项放在 phylo 头部行的 […] 中,或放在正文任意位置的 style […] 行中。

属性默认值效果
layout:rectangularslantedcircularunrootedrectangular树布局
mode:phylogramcladogramchronogramdendrogramphylogram枝长语义
unrooted(标志)等同于 layout: unrooted
branch-width:数字1.5枝的描边宽度
openAngle:数字(度数)0圆形布局的扇形间隙(0 = 完整 360°)
mrsd:引号年份字符串年代图的最近采样日期

8. 标签与注释

  • 标题: phylo "生命之树" — 仅第一行。
  • 比例尺标签: scale "substitutions/site" — 每个文档一条。
  • 支系标签: clade 行中的 [label: "灵长类"]
  • 注释: 行首(前导空白后)的 #。不支持行尾内联注释。

9. 常见错误

你写了解析器报错修复方法
newick: (A,B,C);(未加引号)PhyloParseError: Phylo document must start with 'phylo'给 Newick 字符串加引号:newick: "(A,B,C);"
末端名称含空格:Homo sapiens:0.1解析为 Homo——空格终止未引号名称使用下划线(Homo_sapiens)或单引号('Homo sapiens'
clade 中的叶节点 ID 与 Newick 名称不匹配支系静默为 0 个成员;无高亮完全按照 Newick 字符串中的名称复制
clade X = (A, B) 没有 newick: 或缩进树PhyloParseError: No tree definition found添加 newick: 行或缩进树块
mode: chronogram 没有枝长渲染器将所有长度视为 0;末端在根部重叠为 Newick 字符串中的每条边添加 :length
root: 行未被检测到root: 行中名称含空格(如 My root:),不触发缩进树使用单词根标签或 root:
Newick 含内部节点名称:(A,B)ancestor:0.5解析正常——ancestor 是内部节点标签支持;内部名称显示在内部节点上

10. 语法(EBNF)

document        = header (blank | comment | newick-line | scale-line
                    | outgroup-line | clade-line | style-line | cut-line | indent-line)*

header          = "phylo" ( WS quoted-string )? ( WS "[" props "]" )? NEWLINE
quoted-string   = '"' any-char-but-quote* '"'

newick-line     = "newick:" WS quoted-newick NEWLINE
scale-line      = "scale" ( WS quoted-string )? NEWLINE
outgroup-line   = "outgroup:" WS id NEWLINE
cut-line        = "cut" WS number NEWLINE       // dendrogram mode: flat-cluster threshold height
clade-line      = "clade" WS id WS "=" WS "(" id ("," id)* ")"
                    ( WS "[" clade-props "]" )? NEWLINE
style-line      = "style" WS "[" props "]" NEWLINE

// Indent tree — triggered by a line ending in ":" with no spaces
indent-tree     = root-line indent-node*
root-line       = id ":" NEWLINE
indent-node     = INDENT ( id ":" length | ":" length | id ) ( WS "[" number "]" )? NEWLINE

props           = prop ("," prop)*
prop            = "layout:" layout-value
                | "mode:" mode-value
                | "unrooted"
                | "branch-width:" number
                | "openAngle:" number
                | "mrsd:" quoted-string

clade-props     = clade-prop ("," clade-prop)*
clade-prop      = "color:" quoted-string
                | "label:" quoted-string
                | "highlight:" ( "branch" | "background" | "both" )

layout-value    = "rectangular" | "slanted" | "circular" | "unrooted"
mode-value      = "phylogram" | "cladogram" | "chronogram" | "dendrogram"

// Newick grammar (embedded, parsed separately)
newick          = subtree ";"?
subtree         = leaf | internal
internal        = "(" subtree ("," subtree)* ")" name? nhx? length?
leaf            = name nhx? length?
name            = unquoted-name | "'" single-quoted "'")
length          = ":" number
nhx             = "[" number "]"                     // plain bootstrap
                | "[&&NHX:" nhx-pair (":" nhx-pair)* "]"
nhx-pair        = key "=" value

id              = [a-zA-Z] [a-zA-Z0-9_-]*
number          = /[+-]?[0-9]+(\.[0-9]+)?([eE][+-]?[0-9]+)?/
comment         = INDENT "#" any NEWLINE

权威来源:src/diagrams/phylo/parser.ts。如果与解析器有出入,以解析器为准——请提交 issue。


11. 标准符合性

Schematex 系统发育树遵循 Newick 格式规范(如 PHYLIP 软件包中所述)进行核心树序列化,并遵循 NHX(新罕布什尔扩展) 惯例处理自举支持值。NHX 括号中的 B= 字段是目前唯一在视觉上渲染的 NHX 字段;所有其他字段被解析并存储,但不显示。

目前已实现的内容:

  • ✅ Newick 拓扑、枝长、引号名称、多分叉
  • ✅ 自举值——普通 [95] 和 NHX [&&NHX:B=95]
  • ✅ 矩形、斜线、圆形和无根布局
  • ✅ 系统发生图、支序图和年代图模式
  • ✅ 支系高亮(枝着色、背景着色、两者)
  • ✅ 比例尺
  • ✅ 缩进 DSL 替代方案
  • ⏳ 多树文档(森林)——见第 12 节
  • ⏳ 年代图的时间校准轴(地质年代尺度)
  • ⏳ 末端节点图标或图片
  • B= 之外的 NHX 字段(物种、分类、复制事件)

参考文献:

  • Felsenstein, J. (1986). The Newick tree format. PHYLIP documentation.
  • Zmasek, C.M. & Eddy, S.R. (2001). ATV: Display and manipulation of annotated phylogenetic trees. Bioinformatics, 17(4), 383–384. (NHX specification)
  • Felsenstein, J. (2004). Inferring Phylogenies. Sinauer Associates.

12. 相关示例

phylo·§ Newick/NHX
Phylogenetic Tree: Bacterial Diversity Phylogenetic tree with 10 taxa, phylogram mode, rectangular layout Bacterial Diversity Ecoli Salmonella Vibrio Bacillus Staph Listeria Myco_tb Myco_leprae Strepto Lactobacillus 98 85 92 100 78 0.2 substitutions/site
Bacterial diversity (ten-taxon tree)
Ten-taxon bacterial phylogenetic tree from a Newick/NHX string with bootstrap support values, three colored clade arcs, and a branch-length scale bar.
research & analysis

13. 路线图

计划中——暂不可解析。 请勿在生成的 DSL 中使用这些内容;解析器会拒绝或忽略它们。

  • 多树文档 — 包含多个 newick: 块的 phylo 文件(如基因树与物种树对比)。
  • 年代图的地质时间轴 — 带时代标注的 X 轴(新生代 / 中生代等),而非纯数字刻度。
  • 末端节点元数据 — 为单个末端节点附加性状或彩色标记,无需声明完整支系(如 tip Ecoli [color: "#F00", shape: star])。
  • 自举值之外的 NHX 字段 — 将物种(S=)、复制(D=)和基因转移事件(Tr=)渲染为枝上的符号。
  • 对应图 — 两棵树并排显示,连线连接对应的末端节点。

如果你迫切需要以上任何功能,请在 GitHub issues 中跟踪。

Found this useful?

Schematex is free, fully open source, and zero-dependency. A star helps other developers discover it.