在单个边上连接两个networkx图

时间:2018-03-22 11:19:26

标签: 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)

enter image description here

nx.draw(b)

enter image description here

我想要的是他们这样连接:enter image description here 但我无法看到或找到任何简单的方法,是否有任何networkX功能可以做到这一点?

1 个答案:

答案 0 :(得分:2)

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

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()

output

如果你想在一个公共节点上合并图形(这在你的问题中与标题相反),你可以这样做:

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()

output