我想把一棵树从newick转换成graphml这样的格式,我可以用cytoscape打开它。
所以,我有一个文件“small.newick”,其中包含:
((raccoon:1,bear:6):0.8,((sea_lion:11.9, seal:12):7,((monkey:100,cat:47):20, weasel:18):2):3,dog:25);
到目前为止,我是这样做的(python 3.6.5 anaconda):
from Bio import Phylo
import networkx
Tree = Phylo.read("small.newick", 'newick')
G = Phylo.to_networkx(Tree)
networkx.write_graphml(G, 'small.graphml')
clade有一个问题,我可以使用以下代码修复:
from Bio import Phylo
import networkx
def clade_names_fix(tree):
for idx, clade in enumerate(tree.find_clades()):
if not clade.name:
clade.name=str(idx)
Tree = Phylo.read("small.newick", 'newick')
clade_names_fix(Tree)
G = Phylo.to_networkx(Tree)
networkx.write_graphml(G, 'small.graphml')
给我一些看起来很好的东西:
我的问题是:
-
这是个好办法吗?在我看来,函数不处理内部节点名似乎很奇怪
-
如果将一个节点名替换为足够长的字符串,则将使用以下命令对其进行修剪
Phylo.to_网络(树)
. 如何避免?
示例:用“test-tring”替换“dog”,后者会产生一些问题