【问题标题】:Merging two network maps in networkx by unique labels通过唯一标签合并networkx中的两个网络图
【发布时间】:2012-08-01 12:02:53
【问题描述】:

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() 但这似乎在同一个文件中创建了两个单独的未连接映射,这没有帮助。

还有第二个networkx问题:有没有办法在GEXF文件格式中指定节点标签大小和标签颜色?未在 GEXF v1.2 草案规范中列出。

【问题讨论】:

  • 根据the docsnx.union 假设图形是不相交的,所以如果我解释正确,它甚至不应该为你的问题工作。也许nx.disjoint_union 做你想做的事?
  • 我已经尝试过 disjoint_union - 当你在 gephi 中构建和 viz 时,你会得到两个完全独立的图表。我知道这是可以做到的,但考虑到必须在 GEXF 中构建数据的方式,这似乎并非易事。当您向节点添加颜色和大小属性时,它需要 id#s 作为节点。

标签: python networkx


【解决方案1】:

尝试使用 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))

【讨论】:

  • 谢谢。我会试试这个,然后回复你是否能解决问题。
  • 我意识到我再也没有回过头来回答这个问题。本周我将尝试对其进行测试。有没有其他人试过这个?
  • 虽然这个帖子很老了,但我可以确认上面的答案(add_nodes/edges_from 方法)是正确的。
猜你喜欢
  • 2014-03-15
  • 2012-08-14
  • 1970-01-01
  • 2014-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-03
  • 1970-01-01
相关资源
最近更新 更多