如何绘制二分图

3
如果我想模拟像这张图片一样的网络,但是 Bipartite=4,并将节点数增加到600个节点(n=150,l=150,s=150和m=150),同时还有685条随机边...如何编写仿真代码来创建此网络?有人能帮忙吗?enter code here非常感谢您的关注。
此外,这里是图片的代码:

enter image description here

import networkx as nx
import matplotlib.pyplot as plt
import random
from networkx.algorithms import bipartite
B = nx.Graph()
n = [1,2,3,4]
l = [*'abc']
B.add_nodes_from(n, bipartite=0)
B.add_nodes_from(l, bipartite=1)
B.add_edges_from([(1, "a"), (1, "b"), (2, "b"), (2, "c"), (3, "c"), (4, "a")])
pos = dict()
pos.update( (n, (1, i)) for i, n in enumerate(n) ) 
pos.update( (n, (2, i)) for i, n in enumerate(l) ) 

nx.draw_networkx(B, pos=pos)
nx.draw_networkx_nodes(B, pos=pos, nodelist=n)

plt.axis('off')
plt.show()

你想要一个四部图,而不是一个二部图。 - Sandipan Dey
1个回答

2

您想绘制一个四部图。您可以将上面的代码推广到绘制k部图,其中k=4,在下面的代码中显示,如果需要,您可以更改节点颜色、类型和字体颜色。

B = nx.Graph()

nodes = {}
k = 4
n = 150
ne = 685
e = 229 # since you want total 685 edges, you can have ~229 edges in between two 
        # adjacent sets of nodes

for i in range(k):
    nodes[i] = list(range(n*i, n*(i+1)))

for i in range(k):
    B.add_nodes_from(nodes[i], bipartite=k)

edges = []
for j in range(k-1):
    for i in range(e):
        edges.append((random.choice(nodes[j]), random.choice(nodes[j+1])))

B.add_edges_from(edges[:ne])

pos = dict()
for j in range(k):
    pos.update( (n, (j, i)) for i, n in enumerate(nodes[j]) ) 

plt.figure(figsize=(20,40))
nx.draw_networkx(B, pos=pos)

plt.axis('off')
plt.show() 

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接