python networkx模块有一个方法nx.union,用于合并两个网络映射:
C = nx.union(G,H)
其中G和H是网络映射,而C是组合版本。它按编号查找所有节点,并合并具有相同编号的节点。
以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()但似乎在同一个文件中创建了两个单独的未连接映射,这没有用。
同样是第二个网络问题:有没有办法在GEXF文件格式中指定节点标签大小和标签颜色?未列入GEXF v1.2草案规范中。
答案 0 :(得分:6)
尝试使用nx.read_gexf(file,relabel = True)。这将使用GEXF节点标签作为NetworkX节点标识符。然后,您可以通过将一个节点和边缘添加到另一个来合并两个图形。 e.g。
>>> 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))