2016-02-19 238 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.

相關問題