J'ai réussi à produire le graphique correctement, mais avec d'autres tests, un résultat incohérent a été noté pour les deux lignes de codes différentes suivantes:
nx.draw_circular(h,Edge_color=[h.Edge[i][j]['color'] for (i,j) in h.edges_iter()], width=[h.Edge[i][j]['width'] for (i,j) in h.edges_iter()])
nx.draw_circular(h,Edge_color=list(nx.get_Edge_attributes(h,'color').values()), width=list(nx.get_Edge_attributes(h,'width').values()))
La première ligne produit une sortie cohérente, tandis que la seconde produit une couleur/taille incorrecte selon les ordres des bords.
Cependant, il me semble que les deux lignes ci-dessus s'appuient toutes deux sur l'appel de fonction pour renvoyer les attributs selon l'ordre des bords. Pourquoi les différents résultats?
Cela me semble un peu maladroit d'accéder aux attributs avec h[][][]
; est-il possible d'y accéder par convention de points, par ex. Edge.color for Edge in h.edges()
.
Ou ai-je raté quelque chose?
L'ordre des bords transmis aux fonctions de dessin est important. Si vous ne spécifiez pas (en utilisant le mot-clé bords), vous obtiendrez l'ordre par défaut de G.edges (). Il est plus sûr de donner explicitement le paramètre comme ceci:
import networkx as nx
G = nx.Graph()
G.add_Edge(1,2,color='r',weight=2)
G.add_Edge(2,3,color='b',weight=4)
G.add_Edge(3,4,color='g',weight=6)
pos = nx.circular_layout(G)
edges = G.edges()
colors = [G[u][v]['color'] for u,v in edges]
weights = [G[u][v]['weight'] for u,v in edges]
nx.draw(G, pos, edges=edges, Edge_color=colors, width=weights)
Il en résulte une sortie comme celle-ci: