使用带有权重标记的数据框的 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'}
我有一部分数据框如下 (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'}