在类似以下代码的网络中:
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)
如何使边缘的厚度与权重成比例?
答案 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.
对于节点,我选择使用nx.draw
而不是nx.draw_networkx_nodes
,因为我找不到直接包含with_labels
的方法。请记住,nx.draw
已经绘制了固定宽度的边。对于显示的应用程序,这并不重要,但是在使用透明性时可能会遇到问题。为了避免这种情况,您可以在没有边缘的图形上使用nx.draw
,添加边缘,然后使用nx.draw_networkx_edges