2016-02-19 192 views
0

我在NetworkX Watts-Strogatz随机生成的图上运行Dikjstra最短路径算法,并且想要将我发现的路径的边缘与其余边缘我画图。Python:在NetworkX中着色特定边缘

我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') 

但是这并没有改变的边缘,而不是只是添加了什么看起来像新的节点。

+0

切勿将答案添加到问题的机构。发布一个新答案并将其标记为接受。 –

+0

Got it!编辑回来并在下面添加我的答案。 – AMargheriti

回答

0

我一直在谷歌上搜索1小时发布这个问题之前,我刚刚发布后,我建议这个前面的问题: python networkx - mark edges by coloring for graph drawing

哪种类型的回答我的问题。我只是需要修改它一点点如下:

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() 

我只需要将我的路径转换为整数而不是字符。我还改变了节点和非路径边缘的颜色,使其更加清晰。

结果的图片: Shortest path between 5 and 13 in a randomly generated 25-node Watts-Strogatz graph using my own Dijkstra's algorithm.

相关问题