如何使Networkx生成具有排序节点的GML文件

2024-09-30 22:18:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下代码:

#!/usr/bin/env python
import networkx as nx
def main():
    """docstring for main"""
    outerdict = {"A":["a1","a2","a3"], "B":["b1","b2","b3","b5","b6", "b7"], "C":["c2","c3"], "D":["d1","d2","d3"]}
    keynode = "Z"

    colorlist = [ "#beaed4", "#fdc086", "#ffff99", "#386cb0","#f0027f"]
    G = nx.Graph()
    G.add_node(keynode,graphics={"fill":"#7fc97f","w":27,"h":27, "d":27})
    for i,ky in enumerate(outerdict):
        nodes = outerdict[ky]
        nodecol = colorlist[i]
        print ky, nodecol
        for node in nodes:
            G.add_node(node,graphics={"fill":nodecol,"w":27,"h":27,"d":27})
            G.add_edge(keynode, node, value = 10)

    outfile = "test.gml"
    nx.write_gml(G,outfile)


if __name__ == '__main__':
    main()

它生成以下GML文件:

^{pr2}$

请注意,节点没有按顺序排列。例如,a1介于b1和{}之间。这使得情节看起来像这样:

enter image description here

我希望图按照循环和初始数据结构outderdict顺序排列。这样黄色的节点就会和其他的黄色节点一起出现

如何使用Networkx对GML文件进行排序?其他解决方案(如Igraph)只要在Python框架内就可以了。在


Tags: addnodefor节点maina1fillb1
1条回答
网友
1楼 · 发布于 2024-09-30 22:18:22

自2015年1月1日纳入NetworkX以来,NetworkX中提供了有序的图形数据结构。OrderedGraph类将按添加的顺序从NetworkX数据结构中输出节点和边。
您需要在https://github.com/networkx/networkx/上获得最新的开发版本,以使以下功能正常工作。在

import networkx as nx
outerdict = {"A":["a1","a2","a3"], "B":["b1","b2","b3","b5","b6", "b7"], "C":["c2","c3"], "D":["d1","d2","d3"]}
keynode = "Z"
colorlist = [ "#beaed4", "#fdc086", "#ffff99", "#386cb0","#f0027f"]
G = nx.OrderedGraph()
G.add_node(keynode,graphics={"fill":"#7fc97f","w":27,"h":27, "d":27})
for i,ky in enumerate(outerdict):
    nodes = outerdict[ky]
    nodecol = colorlist[i]
    print ky, nodecol
    for node in nodes:
        G.add_node(node,graphics={"fill":nodecol,"w":27,"h":27,"d":27})
        G.add_edge(keynode, node, value = 10)
outfile = "test.gml"
nx.write_gml(G,outfile)

请注意,“outerdict”数据结构的显示顺序可能与在“enumerate(outerdict)”上循环时初始化它的顺序不同。如果节点“A”、“B”、“C”和“D”的顺序对您很重要,那么您需要更改它们添加到图中的方式,以确保它们按该顺序插入。在

相关问题 更多 >