使用python

时间:2018-11-13 11:37:08

标签: python networkx bioconductor phylogeny cytoscape

我想将一棵树从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')

image1

克莱德(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')

给我一​​些看起来不错的东西:

image2

我的问题是:

  • 这是个好方法吗?对我来说似乎很奇怪,该函数没有处理内部节点名称

  • 如果用足够长的字符串替换一个节点名称,则将使用命令 Phylo.to_networkx(Tree)对其进行修剪。如何避免呢?

示例:用“ test_tring_that_create_some_problem_later_on”代替“狗”

image3

2 个答案:

答案 0 :(得分:1)

看起来您已经在这方面走得很远了。我只能为您提供一些替代方法/扩展方法...

  1. 很遗憾,我找不到可以读取此格式的Cytoscape应用。我尝试搜索PHYLIP,NEWICK和PHYLO。您可能会有更多的运气:

  2. 有一个旧的Cytoscape 2.x插件可以读取此格式,但是要运行此插件,您需要安装Cytoscape 2.8.3,导入网络,然后导出为xGMML(或另存为CYS)和然后尝试在Cytoscape 3.7中打开,以便迁移回使用代码的领域。再说一次,如果2.8.3完成了这种特殊情况所需的工作,那么也许您就不需要迁移:

  3. 最好的方法是编程的,您已经探讨过了。找到将NEWICK转换为iGraph或GraphML的R或Python软件包是一个可靠的策略。请注意,这些语言也有更新且精巧的Cytoscape库,因此您可以在脚本编写环境中进行所有标签清理,布局,数据可视化,分析,导出等操作:

答案 1 :(得分:1)

经过研究,我实际上找到了一个可行的解决方案。 亲爱的读者,我决定在这里为您提供链接going to github