将新节点链接到多个有向图

时间:2019-03-23 05:19:14

标签: python networkx

我正在networkx中寻找一种通过另一个图的节点将两个图链接起来的方法。链接后,结果图(另一个图)除包含两个图的节点外,还包含两个图的节点。 例如:

G=nx.DiGraph()
G.add_node(1)
G.add_node(2)
G.add_edge(1,2)

H=nx.DiGraph()
H.add_node(3)
H.add_node(4)
H.add_edge(3,4)

C=nx.DiGraph()
C.add_node(0)
C.add_node(5)

现在我想将C图中的节点0链接到G和H图(1,3)的第一个节点,并将两个图的最后节点(G和H)链接到C图中的节点5。 。

我尝试了compose函数,但没有帮助。

1 个答案:

答案 0 :(得分:0)

networkx中的图形是彼此独立的实体。绝对没有从Node1中的Graph1Node2中的Graph2的链接。表示类似行为的唯一方法是组成两个图并在它们的节点之间创建链接。如果两个图不相交,则可以使用union函数。如果它们具有相等的节点,则应使用compose函数。但请注意两件重要的事情:

  1. 两个函数都返回一个新图。旧图表没有改变。
  2. 如果使用compose函数,则所有可以合并的元素都将被合并。例如:
import networkx as nx

G=nx.DiGraph()
G.add_nodes_from([1, 2, 3])
G.add_edges_from([(1, 2), (2, 3)])

H=nx.DiGraph()
H.add_nodes_from([5, 2, 3])
H.add_edges_from([(5, 2), (2, 3)])

Q = nx.compose(G, H)
Q.nodes()


NodeView((1, 2, 3, 5))

节点12已合并。因此,如果您不想突然合并,则应检查两个图中的所有节点。