13.1.1 给树的分支上颜色¶
函数 draw 和 draw_graphviz 支持在树中显示不同的颜色和分支宽度。
从Biopython 1.59开始,Clade对象就开始支持 color 和 width 属性,
且使用他们不需要额外支持。这两个属性都表示导向给定的进化枝前面的分支的
属性,并依次往下作用,所以所有的后代分支在显示时也都继承相同的宽度和颜
色。
在早期的Biopython版本中,PhyloXML树有些特殊的特性,使用这些属性需要首先
将这个树转换为一个基本树对象的子类Phylogeny,该类在Bio.Phylo.PhyloXML模
块中。
在Biopython 1.55和之后的版本中,这是一个很方便的树方法:
>>>tree = tree.as_phyloxml()
在Biopython 1.54中, 你能通过导入一个额外的模块实现相同的事情:
>>>from Bio.Phylo.PhyloXML import Phylogeny
>>>tree = Phylogeny.from_tree(tree)
注意Newick和Nexus文件类型并不支持分支颜色和宽度,如果你在Bio.Phylo中使用
这些属性,你只能保存这些值到PhyloXML格式中。(你也可以保存成Newick或Nexus
格式,但是颜色和宽度信息在输出的文件时会被忽略掉。)
现在我们开始指定颜色。首先,我们将设置根进化枝为灰色。我们能通过赋值24位
的颜色值来实现,用三位数的RGB值、HTML格式的十六进制字符串、或者预先设置好的
颜色名称。
>>>tree.root.color = (128, 128, 128)
Or:
>>>tree.root.color = "#808080"
Or:
>>>tree.root.color = "gray"
一个进化枝的颜色会被当作从上而下整个进化枝的颜色,所以我们这里设置根的
的颜色会将整个树的颜色变为灰色。我们能通过在树中下面分支赋值不同的颜色
来重新定义某个分支的颜色。
让我们先定位“E”和“F”最近祖先(MRCA)节点。方法 common_ancestor 返回
原始树中这个进化枝的引用,所以当我们设置该进化枝为“salmon”颜色时,这个颜
色则会在原始的树中显示出来。
>>>mrca = tree.common_ancestor({"name": "E"}, {"name": "F"})
>>>mrca.color = "salmon"
当我们碰巧明确地知道某个进化枝在树中的位置,以嵌套列表的形式,我们就能
通过索引的方式直接跳到那个位置。这里,索引 [0,1] 表示根节点的第一个
子代节点的第二个子代。
>>>tree.clade[0,1].color = "blue"
最后,展示一下我们的工作结果 (见 Fig. 13.1.1 ):
>>>Phylo.draw(tree)
注意进化枝的颜色包括导向它的分支和它的子代的分支。E和F的共同祖先结果刚好
在根分支下面,而通过这样上色,我们能清楚的看出这个树的根在哪里。
我们已经完成了很多!现在让我们休息一下,保存一下我们的工作。使用一个文件
名或句柄(这里我们使用标准输出来查看将会输出什么)和 phyloxml 格式来
调用 write 函数。PhyloXML格式保存了我们设置的颜色,所以你能通过其他树
查看工具,如Archaeopteryx,打开这个phyloXML文件,这些颜色也会显示出来。
>>>import sys
>>>Phylo.write(tree, sys.stdout, "phyloxml")
1.0
128
128
128
1.0
1.0
A
...
本章的其余部分将更加细致的介绍Bio.Phylo核心功能。关于Bio.Phylo的更多例
子,请参见Biopython.org上的Cookbook手册页面。