Python dessine un diagramme de réseau

1. Schéma de réseau en vedette

Modifier la couleur, la taille, etc. du nœud et du bord.

import networkx as nx
import matplotlib.pyplot as plt
plt.figure('设备-用户关系图', figsize=(4, 6))  # 设置画布大小

list_fid = [1, 2, 3, 4]  # 添加设备节点
list_uid = ["a", "b", "c"]  # 添加用户节点
edges = [(1, "a"), (1, "b"), (2, "b"), (2, "c"), (3, "c"), (4, "a")]  # 添加关系
# --------- 在图中添加节点与边 ---------
B = nx.Graph()
# B.add_nodes_from(list_fid, bipartite=0)
# B.add_nodes_from(list_uid, bipartite=1)
B.add_nodes_from(list_fid)
B.add_nodes_from(list_uid)
# B.add_nodes_from(list_cid)  # 不止二部图,可以多个网络图
B.add_edges_from(edges)
# --------- 设定坐标 画节点 ---------
pos_fid = dict((n, (1, i*1.18)) for i, n in enumerate(list_fid))  # 可通过乘系数,调整节点分布
pos_uid = dict((n, (2, i*1.58)) for i, n in enumerate(list_uid))
nx.draw_networkx_nodes(G=B, pos=pos_fid, nodelist=list_fid, node_size=300, node_color='red', margins=0.001)
nx.draw_networkx_nodes(G=B, pos=pos_uid, nodelist=list_uid, node_size=300, node_color='blue', margins=0.001)
# --------- 设定坐标 画节边 ---------
pos = {}  # 全部节点坐标
pos.update(pos_fid)
pos.update(pos_uid)
# pos.update(pos_cid)
nx.draw_networkx_edges(B, pos, edges)
# --------- 画节点标签  ---------
labels_fid = dict(zip(list_fid, list_fid))  # 节点对应的标签
labels_uid = dict(zip(list_uid, list_uid))  # 节点对应的标签
nx.draw_networkx_labels(B, pos=pos_fid, labels=labels_fid, font_size=12.5)  # 画标签
nx.draw_networkx_labels(B, pos=pos_uid, labels=labels_uid, font_size=12.5)  # 画标签
# --------- 保存图片 ---------
plt.savefig("relation1.png", dpi=120)
plt.show()

comme suit:

 Récupérer la source de données des nœuds et des bords à partir du fichier

# 获得设备、用户节点 及 fid-uid 关系
def get_uid_fid_relation():
    df = pd.read_csv('data/uid_fid.csv', dtype=str)
    df = df.sort_values(['user_id', 'fid'])  # 排序

    # 获得 fid 节点
    list_fid = df['fid'].to_list()
    list_fid = list(set(list_fid))   # 节点去重

    # 获得 user_id 节点
    list_uid = df['user_id'].to_list()
    list_uid = list(set(list_uid))

    relation_uid_fid_list = []
    for line in df.values:
        relation_uid_fid_list.append((line[0], line[1]))
    return list_fid, list_uid, relation_uid_fid_list

if __name__ == '__main__':
    list_fid, list_uid, edges = get_uid_fid_relation()  

11

Je suppose que tu aimes

Origine blog.csdn.net/MusicDancing/article/details/132424514
conseillé
Classement