问题描述
我正在尝试使用以下示例数据来绘制网络图:-
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,ax=ax)
labels = nx.get_edge_attributes(G,'COUNT')
_ = nx.draw_networkx_labels(G,ax=ax)
nx.draw_networkx_edge_labels(G,edge_labels=labels)
plt.show()
但是此解决方案不会给出箭头,而只是给我两个节点之间的权重。而且由于数据繁重,该图看起来很笨拙。
我已经看到一些解决方案,其中增加了边缘的宽度,但是在我的情况下不起作用,因为我有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)