[英]Coloring specific edges in NetworkX
我正在NetworkX Watts-Strogatz随机生成的图形上运行Dikjstra的最短路径算法,并且我想在绘制图形之前先对所发现的路径的边缘进行着色,使其与其余的边缘有所不同。
我的Dijkstra的算法返回路径中的节点列表,如下所示:
dijkstra(graph, '5', '67')
['67', '62', '59', '56', '3', '99', '5']
我将如何更改这些节点之间的边缘颜色,使其变为蓝色而不是红色?
请注意,该图是随机生成的,因此路径每次都会更改,但是它将始终将路径中的节点输出为列表。
我最初尝试了以下方法:
for i in range(path.__len__()):
if i != path.__len__()-1:
wsGraph.add_edge(path[i], path[i]+1, color='b')
但这并没有修改边缘,而是添加了看起来像新节点的东西。
我找到了这个问题, python networkx-通过为图形绘制着色来标记边缘 ,这回答了我的问题。 我只需要对其进行如下修改:
for e in wsGraph.edges():
wsGraph[e[0]][e[1]]['color'] = 'grey'
# Set color of edges of the shortest path to green
for i in range(len(path)-1):
wsGraph[int(path[i])][int(path[i+1])]['color'] = 'red'
# Store in a list to use for drawing
edge_color_list = [wsGraph[e[0]][e[1]]['color'] for e in wsGraph.edges() ]
nx.draw(wsGraph, node_color='blue', edge_color = edge_color_list, with_labels = True)
plt.show()
我只需要将路径转换为整数而不是字符即可。 我还更改了节点和非路径边缘的颜色以使其更加清晰。
结果图片:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.