GraPhlAn进化树可视化操作指南
Graphlan简介
Graphlan 是一个可视化进化树和基于分类等级绘制层级分类树的工具,基于Python2.7,可通过conda安装conda install -c bioconda graphlan,或下载源代码使用。

由于Graphlan基于python2.7,conda安装时,可能需要指定安装环境的python版本。
如上图所示Graphlan有两种输入文件:
- Tree input file: 树文件(包括Newick或XML/phyloxml格式),或者存有分类层级关系的text文本文件;
- Annotation file: 通过注释标签定义的各种图形信息(见下文)。
和两个python脚本:
- graphlan_annotate.py:将树文件/text文本文件和注释文件合并为.xml文件;
- graphlan.py:将graphlan_annotate.py生成的.xml文件转为png, pdf, ps, eps, svg等图文件。
显然,Graphlan的使用关键在于graphlan_annotate.py脚本的掌握。
通常由建树软件,如IQ-TREE,RAxML等,生成的进化树格式多为Newick格式,因此可直接作为graphlan_annotate.py的输入文件。
或者利用Biopython中的Phylo模块将Newick格式树转为PhyloXML格式的树。
PhyloXML是专门针对系统发育树而设计的XML,是一种用于标记电子文件使其具有结构性的标记语言,XML的先驱之一即HTML网页标记语言。
以分类层级关系的可视化为例
graphlan_annotate.py实际上是在xml格式树文件的基础上,添加了各种注释标记,例如针对树节点的标记,以及树外围圈形热图等。 下图以分类层级关系(可理解为无枝长的进化树)输入文件为例,显示了Graphlan的可视化树型结构的逻辑过程。

分类层级关系输入文件中的层级关系与Lineage格式数据一致,即分类单元按照层级高低自左向右按顺序排列,并用.分隔。
将层级关系文件输入graphlan.py生成的图形,即不加任何注释的默认图(default plot)。
注释标记信息写入Annotation file,通过graphlan_annotate.py可以加到默认图上。首先,全局图形选项(global options)可定义核心树形的显示效果, 如树的扇形角度、树枝粗细、子分支的分隔程度等。然后,通过指定树节点的名称,并附以节点选项(node options)的设置,可定义不同分枝的显示效果。再者, 通过指定树节点的名称,并附以标记选项(label options)的设置,可定义不同分枝的文字注释、背景色等。最后,通过指定树末端节点的名称, 附以外圈选项(external ring options)的设置,可定义多层丰富的注释信息。
因此,逻辑上Graphlan对树的可视化,可分为三个方面:
- 核心树形的可视化
- 树分枝的文字和颜色注释
- 外层类热图式的圈形注释
理解此点,对掌握Graphlan的使用有很大帮助。
通过graphlan_annotate.py添加的注释信息,可同分步进行,例如按上述逻辑,三步添加不同的注释信息。也可通过一个注释文件,把所有的注释信息一次添加到树上。
注释文件
Global options
- clade_separation 定义子分枝之间分隔距离 Default is 0.0
- branch_thickness 定义树分枝的线粗细 Default is 0.75
- branch_color 定义树分枝颜色
- branch_bracket_depth 定义树分叉的位置(取值0-1),该值越小分叉位置离子节点越近,值越大分叉位置与父节点越近, Default is 1
- branch_bracket_width 定义分叉宽度(取值0-1),该值越小分叉宽度越小. Default is 1.0
- clade_marker_shape 定义树节点形状
- clade_marker_size 定义树节点形状的大小. Default is 20.0
- clade_marker_color 定义树节点形状的颜色
- clade_marker_edge_color 定义树节点形状的边颜色. Default is #000000 (i.e. black)
- clade_marker_edge_width 定义树节点形状的边宽度. Default is 0.5
Node options
为树的各节点定义属性,须首先指定节点的名称,如不指定节点的名称,则对所有节点都有效。在注释文件中的写法如下:
[clade_name{+|*|^}] graphical_tree_option graphical_tree_option_value
其中graphical_tree_option包括:
- clade_marker_size 定义树节点形状的大小. Default is 20.0
- clade_marker_color 定义树节点形状的颜色. Default is #FFFFFF (i.e. white)
- clade_marker_shape 定义树节点形状. Default is 'o' (i.e. circle)
Graphlan支持的树节点形状包括:
- '.' : point marker
- ',' : pixel marker
- 'o' : circle marker
- 'v' : triangle_down marker
- '^' : triangle_up marker
- '<' : triangle_left marker
- '>' : triangle_right marker
- '1' : tri_down marker
- '2' : tri_up marker
- '3' : tri_left marker
- '4' : tri_right marker
- 's' : square marker
- 'p' : pentagon marker
- '*' : star marker
- 'h' : hexagon1 marker
- 'H' : hexagon2 marker
- '+' : plus marker
- 'x' : x marker
- 'D' : diamond marker
- 'd' : thin_diamond marker
- '|' : vline marker
- '_' : hline marker
树节点名称写法的解释: * 包含该节点及该节点所属的所有子节点; + 包该节点及该节点所属的所有末端节点; ^ 该节点(不含其本身)下属所有末端节点。不加以上三种标记则仅对该节点有效。 另外,在注释文件中的写法,应为clade_name / clade_name+ / clade_name* / clade_name^
Label options
为节点及其代表的子分枝添加文字或背景颜色注释,同样需要首先指定节点名称,然后定义相关属性,包括:
- annotation 定义子分枝的注释文字
- annotation_background_color 定义子分枝的背景颜色
External ring options
从核心树图向外,Graphlan可添加多层圈形,类似热图的注释信息,如通过打标记显示定性数据,或通过定义圈的高度来显示定量信息。在注释文件中的写法如下:
[clade_name] ring_option ring_level ring_option_value
ring_option包括:
- ring_color 定义圈层颜色.
- ring_width 定义圈层宽度.
- ring_height 定义圈层高度. 默认为树高的1/10,或所有指定高度的的最高值,其他高度按比例缩小。
- ring_alpha 定义圈层颜色透明度. Default is 1.0
- ring_shape 定义圈层的形状,默认为R(矩形,实为指向中心的环形),可选为v (指向中心的三角) or ^(指向外的三角)
ring_level定义了圈层的位置,核心树图向外第一圈ring_level=1
示例:
clade_name ring_shape 1 v
注意:注释文件中节点名称、各属性、及取值,都使用制表符
tab键分隔的。
结束语
Graphalan的使用,主要是要根据设计需求,按照其格式规范编写好注释文件。通常情况下,需要使用Graphlan可视化进化树或分类层级信息的, 都是较大的树,或层级结构中含有较多的数据。特别是对外圈层的设置,需要写入注释文件的内容很多,手工输入是不现实的。因此需要借助其他工具 来批量生成注释内容。这需要我们对进化树的格式解析、格式的转换、以及Graphalan的注释格式规范都有较好的理解。
Graphlan原代码包中提供了不少实例,推荐按照guide文件夹中提供的数据,逐个实践相关方法。