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

时间:2020-08-27 09:39:38

标签: python pandas networkx

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

    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进行了多少次,其余都保持不变。每个边缘的密度数字应高于节点边缘/箭头。

这是我到目前为止尝试过的:-

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

但是此解决方案不会给出箭头,而只是给我两个节点之间的权重。而且由于数据繁重,该图看起来很笨拙。

我已经看到一些解决方案,其中增加了边缘的宽度,但是在我的情况下不起作用,因为我有3位数字的“密度”数字。我真的是新来的,会有所帮助。预先感谢

1 个答案:

答案 0 :(得分: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)

enter image description here