Py学习  »  Python

使用python将newick转换为graphml

Gildas • 4 年前 • 345 次点击  

我想把一棵树从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_网络(树) . 如何避免?

示例:用“test-tring”替换“dog”,后者会产生一些问题

image3

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/48911
 
345 次点击  
文章 [ 2 ]  |  最新文章 4 年前
Gildas
Reply   •   1 楼
Gildas    5 年前

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

AlexanderPico
Reply   •   2 楼
AlexanderPico    5 年前

看来你已经做了很多了。我只能对你的方法提出一些选择/扩展。。。

  1. 不幸的是,我找不到一个可以读取此格式的Cytoscape应用程序我试着寻找菲利普,纽尼克和菲洛。你可能会有更多的运气:

  2. 有一个旧的cytoscape 2.x插件可以读取此格式,但是要运行此插件,您需要安装cytoscape2.8.3,导入网络,然后导出为xgmml(或另存为cys),然后尝试在cytoscape 3.7中打开,以便迁移回活代码之乡。同样,如果2.8.3满足了这个特殊情况的需要,那么可能不需要迁移:

  3. 最好的方法是编程式的,您已经探索过了找到将NEWICK转换为iGraph或GraphML的R或Python包是一个可靠的策略请注意,这些语言中也有更新的和平滑的cytoscape libs,因此您可以在脚本环境中执行所有标签清理、布局、数据可视化、分析、导出等操作: