根据权重改变边缘厚度

4 投票
2 回答
6928 浏览
提问于 2025-04-18 15:59

在使用 draw_networkx_edges() 这个函数时,能不能根据边的权重来改变边的粗细呢?

这里我假设这些权重都小于一个已知的数字,比如说 k。

2 个回答

1

一种方法是像这个例子那样对边进行分类。

第一步:给边添加权重
第二步:根据权重对边的列表进行分类
第三步:将边的列表传递给draw_networkx_edges

我是在另一个SO讨论串中偶然发现这个的。

旧的失效链接:http://networkx.lanl.gov/examples/drawing/weighted_graph.html

5

你可以使用 edges(data='weight') 这个方法:

这个方法会返回边的信息,格式是一个元组,里面可以包含一些可选的数据,顺序是 (节点, 邻居, 数据)。

也就是说,当你指定 data='weight' 时,可以通过 edge[2] 来获取边的相关数据(如果你调用 data=True 来获取所有数据元素作为字典,那么可以用 edge[2]['weight'])。

下面是一个例子:

import networkx as nx
g = nx.Graph()
g.add_edge('A', 'B', weight=5)
g.add_edge('A', 'C', weight=15)
g.add_edge('B', 'C', weight=7)

pos = nx.spring_layout(g, seed=0)
nx.draw_networkx(g, pos)

for edge in g.edges(data='weight'):
    nx.draw_networkx_edges(g, pos, edgelist=[edge], width=edge[2])

图形示例

撰写回答