在单个边上连接两个networkx图

Nic*_*aiF 1 python graph networkx

我需要一个带有N个簇的图,该图多少代表了社交网络的结构。我计划通过创建具有barabasi albert结构的N个图,然后通过单个节点将它们连接来解决此问题。

import networkx as nx

a = nx.barabasi_albert_graph(10,2)
b = nx.barabasi_albert_graph(10,2)

nx.draw(a)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

nx.draw(b)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

我想要的是像这样连接它们:在此处输入图片说明 但是我看不到或没有找到任何简单的方法来做到这一点,是否有任何networkX功能可以做到这一点?

wol*_*ats 5

通过边缘连接两个图非常简单:

import matplotlib.pyplot as plt
import networkx as nx

a = nx.barabasi_albert_graph(10,2)
b = nx.barabasi_albert_graph(10,2)

c = nx.union(a,b, rename=('a-', 'b-'))
c.add_edge('a-0', 'b-0')

nx.draw_networkx(c,with_labels=True,node_size=500)
plt.show()
Run Code Online (Sandbox Code Playgroud)

输出

而且,如果您想在一个公共节点上合并图形(这在您的问题中与标题相反地指出),则可以执行以下操作:

import matplotlib.pyplot as plt
import networkx as nx

a = nx.barabasi_albert_graph(10,2)
b = nx.barabasi_albert_graph(10,2)

a= nx.relabel_nodes(a, { n: str(n) if n==0 else 'a-'+str(n) for n in  a.nodes })
b= nx.relabel_nodes(b, { n: str(n) if n==0 else 'b-'+str(n) for n in  b.nodes })

c = nx.compose(a,b)

nx.draw_networkx(c,with_labels=True,node_size=500)
plt.show()
Run Code Online (Sandbox Code Playgroud)

输出