【发布时间】:2020-01-06 11:45:47
【问题描述】:
当使用networkx的draw_networkx_edges()时,是否可以根据它们的重量来改变边缘的粗细?
这里我假设权重小于某个已知数字,例如 k。
【问题讨论】:
标签: python matplotlib networkx
当使用networkx的draw_networkx_edges()时,是否可以根据它们的重量来改变边缘的粗细?
这里我假设权重小于某个已知数字,例如 k。
【问题讨论】:
标签: python matplotlib networkx
你可以使用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])
【讨论】:
一种方法是对边缘进行分类,如this example 所示。
第 1 步:为边添加权重
第 2 步:根据权重对边缘列表进行分类
第 3 步:将 edgelist 传递给 draw_networkx_edges
我是从different SO thread 偶然发现的。
旧链接:http://networkx.lanl.gov/examples/drawing/weighted_graph.html
【讨论】: