2016-02-19 2 views
0

Je cours un algorithme de chemin le plus court de Dikjstra sur un graphe généré de manière aléatoire par NetworkX Watts-Strogatz et je veux colorier les bords du chemin que j'ai trouvé différemment du reste des bords avant Je dessine le graphique.Python: Coloration d'arêtes spécifiques dans NetworkX

algorithme de Dijkstra Mon renvoie une liste des noeuds dans le chemin comme suit:

dijkstra(graph, '5', '67') 
['67', '62', '59', '56', '3', '99', '5'] 

Comment dois-je de changer la couleur des bords entre ces noeuds-à-dire bleu au lieu de rouge?

Notez que le graphique est généré de façon aléatoire afin que le chemin change à chaque fois, mais il sortira toujours les nœuds dans le chemin sous la forme d'une liste.

J'ai d'abord essayé quelque chose le long des lignes de:

for i in range(path.__len__()): 
     if i != path.__len__()-1: 
      wsGraph.add_edge(path[i], path[i]+1, color='b') 

Mais cela ne modifiait pas les bords et au lieu vient d'ajouter ce qui ressemblait à de nouveaux nœuds.

+0

Ne jamais ajouter la réponse au corps de la question. Poster une nouvelle réponse et la marquer comme acceptée à la place. –

+0

J'ai compris! Edité de retour et ajouté ma réponse ci-dessous. – AMargheriti

Répondre

0

J'ai été googler pendant 1 heure avant de poster cette question et juste après que j'ai posté, je suggérais cette question précédente: python networkx - mark edges by coloring for graph drawing

qui répond à mes questions de genre. J'ai juste besoin de le modifier un peu comme suit:

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

J'ai juste besoin de convertir mon chemin en entiers au lieu de caractères. J'ai également changé les couleurs des nœuds et des bords non-path pour le rendre plus clair.

Image de résultat: Shortest path between 5 and 13 in a randomly generated 25-node Watts-Strogatz graph using my own Dijkstra's algorithm.