2016-06-01 8 views
0

Ich benutze Code von dieser Frage: networkx - change color/width according to edge attributes - inconsistent result, weil es fast meine Frage beantwortet, aber ich arbeite mit einem Multigraph, weshalb die Antwort auf diese Frage mir nicht hilft.Access-Attribute eines Multigraphen in NetworkX

Ich muss ein Diagramm mit Linienstärken basierend auf den Gewichten zeichnen, aber das Diagramm wird falsch gezeichnet. Ich bin sicher, das Problem liegt an der Reihenfolge der Kanten. Hier ist mein Code:

Ich habe einen Multigraphen, die aus Kanten gefertigt, die wie folgt aussehen:

edgies = [(1,2, {'color': 'r'}),(2,3,{'color': 'b'}),(3,4,{'color':'g'})] 

G = nx.MultiGraph() 

G.add_edges_from(edgies, color = 'color') 

pos = nx.circular_layout(G) 

edges = G.edges() 
colors = [G[u][v]['color'] for u,v in edges] 

nx.draw(G, pos, edges=edges, edge_color=colors) 
plt.show() 

Der Fehler I ist wie folgt:

colors = [G[u][v]['color'] for u,v in edges] 
KeyError: 'color' 

Dieser Code funktioniert, wenn Ich benutze nur ein Diagramm, gibt aber den Fehler bei der Arbeit mit einem Multigraph. Bitte lassen Sie mich wissen, wenn Sie weitere Informationen benötigen. Vielen Dank.

Antwort

2

Ändern der Zeile verursacht den Fehler zu

colors = [print(G[u][v]) for u,v in edges] 

Wir können sehen, was Sie sehen im Grunde ist:

{0: {'color': 'r'}} 
{0: {'color': 'b'}} 
{0: {'color': 'g'}} 

Ich gehe davon aus NetworkX speichert die grafische Darstellung auf als der Schlüssel ist, Sie müssen also zuerst auf die Taste [0] wie folgt zugreifen:

colors = [G[u][v][0]["color"] for u,v in edges] 

Dieses Zugriffsmuster ist Som Ewas dokumentiert auf https://networkx.github.io/documentation/networkx-1.9.1/reference/classes.multigraph.html im Kantenabschnitt.

+0

DANKE !!!!! –

Verwandte Themen