2012-08-01 89 views
0

蛇皮networkx模块具有用于合并两个网络图的方法nx.union合并在networkx两个网络地图。它通过编号查找所有节点,并合并具有相同编号的节点。存储在GEXF格式节点通过独特标签

例子:

<node id="0" label="walking"> 
    <ns0:color b="200" g="11" r="11" /> 
    <attvalues> 
     <attvalue for="0" value="2" /> 
     <attvalue for="1" value="26" /> 
    </attvalues> 
    </node> 

这对我来说是一个问题,因为我的地图在每个节点属性任意节点的数字,但独特的标签。当我分配节点号时,我只是查看列表并使用列表索引作为节点号,但map1可能在84位置有“步行”,而map2可能在157位置有“步行” - 因此节点号不容易涉及节点标签。

有谁知道我应该如何联合使用networkx的网络地图,并指定节点标签名称的匹配?

我可能不得不写我自己的方法,但只是想确保我没有失去一些东西。有一个union_disjoint(),但似乎在同一个文件中创建两个单独的未连接的地图,这没有帮助。

也是第二个networkx问题:有没有一种方法来指定GEXF文件格式中的节点标签大小和标签颜色?未列入GEXF v1.2草案规范。

+0

根据[该文档(http://networkx.lanl.gov/preview/reference/generated/networkx.union.html),'nx.union'假定图表来是不相交的,因此,如果我解读正确,它甚至不应该为你的问题工作。也许['nx.disjoint_union'](http://networkx.lanl.gov/preview/reference/generated/networkx.disjoint_union.html#networkx.disjoint_union)做你想要的? – 2012-08-01 15:24:39

+0

我已经尝试过disjoint_union - 当你在gephi中编译和编译时,会得到两个完全分离的图。我知道这是可以完成的,但考虑到数据必须在GEXF中进行结构化的方式,似乎不是微不足道的。当您向节点添加颜色和大小attrib时,它需要id#s作为节点。 – 2012-08-01 18:17:53

回答

6

尝试使用nx.read_gexf(file,relabel = True)。这将使用GEXF节点标签作为NetworkX节点标识符。然后,可以通过将两个图的节点和边添加到另一个来合并这两个图。例如

>>> G = nx.read_gexf(file1, relabel=True) 
>>> H = nx.read_gexf(file2, relabel=True) 
>>> G.add_nodes_from(H.nodes(data=True)) 
>>> G.add_edges_from(H.edges(data=True)) 
+0

谢谢。我会尝试解决问题并回复您。 – 2012-09-29 23:04:12

+0

我意识到我从来没有回过头来回答这个问题。我会在本周尝试测试它。有没有其他人试过这个? – 2012-11-19 17:24:17

+4

虽然这个线程很旧,但我可以确认上面的答案(add_nodes/edges_from方法)是正确的。 – 2014-03-11 03:50:35