Python dibuja un diagrama de red

1. Diagrama de red destacado

Modifique el color, tamaño, etc. de los nodos y bordes.

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

como sigue:

 Obtener fuente de datos de nodo y borde desde un archivo

# 获得设备、用户节点 及 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

Supongo que te gusta

Origin blog.csdn.net/MusicDancing/article/details/132424514
Recomendado
Clasificación