NicolaiF
NicolaiF

Reputation: 1343

Joining two networkx graphs on a single edge

I need a graph with N clusters, that somewhat represents the structure of social networks. I planned to go about this by creating N graphs with barabasi albert structure, and then connecting them by a single node.

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

what I want is them connected like this:enter image description here But I cannot see or find any simple way of doing this, are there any networkX functionality that can do just this?

Upvotes: 3

Views: 3289

Answers (1)

wolfrevokcats
wolfrevokcats

Reputation: 2100

Joining two graphs by edge is really simple:

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

And if you want to merge graphs on a common node (this is stated in your question contrary to the title), you can do this:

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

Upvotes: 10

Related Questions