根据权重改变边缘厚度
在使用 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])