使用带有权重标记的数据框的 NetworkX 包

NetworkX package using dataframe with weights labeled

我有一部分数据框如下 (con_df):

from  to    fw
1     2    no fw
1     4    fw
2     3    no fw
2     5    no fw
2     6    no fw
2     7    fw

有 3 个变量

想使用 NetworkX 制作图表

network = nx.from_pandas_edgelist(df=con_df, source='from', target='to',
                                  edge_attr='fw', create_using=nx.MultiGraph())
nx.draw(network, with_labels = True)

以上是我使用的代码,输出如下, 问题是权重选项没有显示在图表上。 我认为 edge_attr 选项是针对重量属性的,但它不起作用

我想要的是 fw 变量被标记在图表的边缘

代码中是否存在问题,或者我应该采用不同的方法?

with_labels 指的是 nodes 标签,而不是边的标签。

你需要使用nx.draw_networkx_edge_labels:

labels = {x[:2]: network.get_edge_data(*x)['fw']  for x in network.edges}
pos = nx.spring_layout(network)
nx.draw(network, pos, with_labels=True)
nx.draw_networkx_edge_labels(network, pos, edge_labels=labels)

输出:

labels 词典的内容:

{(1, 2): 'no fw',
 (1, 4): 'fw',
 (2, 3): 'no fw',
 (2, 5): 'no fw',
 (2, 6): 'no fw',
 (2, 7): 'fw'}