绘制网络图并将边权重添加到网络边 python

Plot Network Graph and add edge weights to network edges python

我正在尝试使用如下示例数据绘制网络图:-

    From    To  Density
0   A       B    296
1   B       C    258
2   C       D    296
3   D       E    274
4   E       F    272
5   F       G    195
6   G       H    286
7   H       I    257
8   I       J    204
9   J       K    66

我想在边缘添加密度数字,例如 A 到 B 已经完成了多少次,然后休息。每条边的密度值都应高于节点 edge/arrow。

这是我目前尝试过的方法:-

G = nx.from_pandas_edgelist(network_data,'FROM','TO', edge_attr='COUNT',create_using=nx.DiGraph())

fig, ax = plt.subplots(figsize=(20,15))
pos = nx.kamada_kawai_layout(G)
nx.draw_networkx_nodes(G,pos, ax = ax,node_size=1500)
nx.draw_networkx_edges(G, pos, ax=ax)
labels = nx.get_edge_attributes(G,'COUNT')
_ = nx.draw_networkx_labels(G, pos, ax=ax)
nx.draw_networkx_edge_labels(G,pos,edge_labels=labels)
plt.show()
    

但是这个解决方案不会给出箭头,它只会给出 2 个节点之间的权重。而且由于数据量很大,情节看起来很笨拙。

我见过一些增加边缘宽度的解决方案,但在我的情况下不起作用,因为我有 3 位数的密度。我对此很陌生,我们将不胜感激。提前致谢

您可以使用 networkx.

具体来说,您可以从字典创建一个 networkx 图,如:

import networkx as nx

dod = {'A': {'B': {"weight": 256}},
       'B':{'C':{'weight':258}},
       'C':{'D':{'weight':296}}}

G = nx.from_dict_of_dicts(dod)

如果你想画画:

pos=nx.spring_layout(G)
labels = nx.get_edge_attributes(G,'weight')
nx.draw(G,pos)
nx.draw_networkx_edge_labels(G,pos,edge_labels=labels)