配重边线networkx

时间:2019-05-24 12:15:53

标签: python networkx

在类似以下代码的网络中:

G = nx.Graph()   # or DiGraph, MultiGraph, MultiDiGraph, etc
G.add_weighted_edges_from([(0,1,3.0),(1,2,7.5)])
nx.draw(G, pos=nx.spectral_layout(G), with_labels=True)

如何使边缘的厚度与权重成比例?

1 个答案:

答案 0 :(得分:0)

您可以使用nx.draw_networkx.edges,它接受​​参数width,并接受列表。

因此,给定G,您可以像这样访问边缘和权重:

G.edges(data=True)

这将返回:

EdgeDataView([(0, 1, {'weight': 3.0}), (1, 2, {'weight': 7.5})])

因此,边缘数据存储为元组列表,元组列表的元素2为字典,键为“ weight”。这使您可以使用列表理解来访问各个权重:

edge_width = [a[2]['weight'] for a in G.edges(data=True)]

nx.draw(G, pos=nx.spectral_layout(G), with_labels=True) # draw nodes (and edges!)
nx.draw_networkx_edges(G, pos=nx.spectral_layout(G), width=edge_width) # paint over edges with specified width.

enter image description here

对于节点,我选择使用nx.draw而不是nx.draw_networkx_nodes,因为我找不到直接包含with_labels的方法。请记住,nx.draw已经绘制了固定宽度的边。对于显示的应用程序,这并不重要,但是在使用透明性时可能会遇到问题。为了避免这种情况,您可以在没有边缘的图形上使用nx.draw,添加边缘,然后使用nx.draw_networkx_edges