networkx 笔记:绘制二部图

假设要绘制这样的二部图

1 准备数据

ada_matrix=[[0,1,0,1],
           [0,1,0,0],
           [1,0,1,0],
           [0,0,0,1]]
#B和G的邻接矩阵

2 搭建图

import networkx as nx
G=nx.Graph()

left_lst=['B1','B2','B3','B4']
right_lst=['G1','G2','G3','G4']
#左和右各4个点

G.add_nodes_from(left_lst)#,bipartite=0)
G.add_nodes_from(right_lst)#,bipartite=1)
#有教程这里加了一个bipartite的设置,但我觉得没有好像也行?

num_l,num_c=len(ada_matrix),len(ada_matrix[0])

for i in range(num_l):
    for j in range(num_c):
        if(ada_matrix[i][j]):
            G.add_edge(left_lst[i],right_lst[j])
#根据邻接矩阵添加边

3 绘制图

labels_set={}
comb_lst=left_lst+right_lst
for i in range(len(comb_lst)):
    labels_set[comb_lst[i]]=comb_lst[i]
labels_set
#设置每个点对应的label字典

color_lst=['r','r','r','r','green','green','green','green']
#设置每个点对应的颜色列表


nx.draw(G,labels=labels_set,
        node_color=)

但出来的图不是我们想象中的二部图

4 添加位置属性

pos_dict={}
num_left=0
num_right=0
for i in G.nodes:
    if(i[0]=='B'):
        pos_dict[i]=(1,num_left)
        num_left+=1
    else:
        pos_dict[i]=(2,num_right)
        num_right+=1

#设置位置字典

nx.draw(G,labels=labels_set,pos=pos_dict,node_color=color_lst)

 

猜你喜欢

转载自blog.csdn.net/qq_40206371/article/details/130019002
今日推荐