将布局从 networkx 转移到 cytoscape

Posted

技术标签:

【中文标题】将布局从 networkx 转移到 cytoscape【英文标题】:Transfer layout from networkx to cytoscape 【发布时间】:2011-08-15 05:50:37 【问题描述】:

我想使用 networkx 为图形生成布局。是否可以将此布局转移到cytoscape 并在那里绘制?我试图简单地写一个图表为

import networkx as nx
G = nx.Graph()
G.add_edge(0,1,weight=.1)
G.add_edge(2,1,weight=.2)
nx.write_gml(G,'g.gml')
nx.write_graphml(G,'g.xml')

但这些都没有在 cytoscape 中读取。我不确定如何以可以包含位置的格式传输图表。

【问题讨论】:

【参考方案1】:

您的g.xml GraphML 文件看起来不错,并为我加载到 Cytoscape(我在 Mac 上)。您是否安装了graphmlreader 插件?

如果没有,请下载并将其放入您的插件文件夹,然后重新启动 Cytoscape 并尝试再次加载 g.xml 网络。

更新 下面是一些将图形外观和定位添加到 networkx 图形的代码。它有点冗长,您可以根据需要省略一些属性:

import networkx as nx

G = nx.Graph()
G.add_edge(0, 1, weight=0.1, label='edge', graphics=
    'width': 1.0, 'fill': '"#0000ff"', 'type': '"line"', 'Line': [],
    'source_arrow': 0, 'target_arrow': 0)
nx.set_node_attributes(G, 'graphics', 
    0: 'x': -85.0, 'y': -97.0, 'w': 20.0, 'h': 20.0,
        'type': '"ellipse"', 'fill': '"#889999"', 'outline': '"#666666"',
        'outline_width': 1.0,
    1: 'x': -16.0, 'y': -1.0, 'w': 40.0, 'h': 40.0,
        'type': '"ellipse"', 'fill': '"#ff9999"', 'outline': '"#666666"',
        'outline_width': 1.0
    )
nx.set_node_attributes(G, 'label', 0: "0", 1: "1")
nx.write_gml(G, 'network.gml')

结果:

【讨论】:

小费+1。所以我能够在 cytoscape 中读取 graphml 文件。我现在如何编码 graphml 文件中的节点位置? 酷——我会给你一个在 GML 中添加节点“图形”属性的例子,因为它是一种更紧凑的格式,你可以将它翻译成 GraphML。 只是想说声谢谢!这段代码解释了让我的图表进入 cytoscape 的一点点额外的内容!现在,我能够以交互式概率生成和可视化完整的代谢图。 能否请您说出您使用的是哪个版本的python和networkx?我在写入 gml 时遇到问题,因为 networkx 不允许将字典作为参数写入(我的意思是“图形”)。我发现这是很多人的常见问题。【参考方案2】:

networkx 现在具有向/从 cytoscape JSON 格式写入/读取图形的功能:https://networkx.github.io/documentation/stable/_modules/networkx/readwrite/json_graph/cytoscape.html

【讨论】:

此函数与上面@samplebias 的答案相同,并以所需的 JSON 格式输出,但它不允许附加属性。只有 cytoscape 需要的名称和 ID 字段【参考方案3】:

只是一个补充

nx.__version__
'2.3'
nx.set_node_attributes(G,  n: 'x': p[0], 'y': p[1], 'graphics')

参数位置不对……

【讨论】:

以上是关于将布局从 networkx 转移到 cytoscape的主要内容,如果未能解决你的问题,请参考以下文章

改进 Python NetworkX 图形布局

考虑从WordPress转移到Jekyll:什么在哪里?

从 Pandas DataFrame 构建 NetworkX 图

可以使用 python 3 从 networkx 获取分层图吗?

将 NetworkX 图嵌入 PyQT 小部件

必须指向二维图(x,y)坐标networkx python