networkx – cambia el color / ancho de acuerdo a los atributos del borde – resultado inconsistente

Logré producir la gráfica correctamente, pero con algunas pruebas más, se observó un resultado inconsistente para las siguientes dos líneas de códigos diferentes:

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 primera línea produce resultados consistentes, mientras que la segunda produce un color / tamaño incorrecto según los órdenes de los bordes.

Sin embargo, me parece que las dos líneas anteriores se basan en la llamada a la función para devolver los atributos por el orden de los bordes. ¿Por qué los diferentes resultados?

Me parece un poco torpe tener acceso a los atributos con h[][][] ; es posible acceder a él mediante la convención de puntos, por ejemplo, edge.color for edge in h.edges() .

¿O me perdí algo?

Related of "networkx – cambia el color / ancho de acuerdo a los atributos del borde – resultado inconsistente"

El orden de los bordes pasados ​​a las funciones de dibujo es importante. Si no especifica (usando la palabra clave edge) obtendrá el orden predeterminado de G.edges (). Es más seguro dar explícitamente el parámetro de esta manera:

 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) 

Esto resulta en una salida como esta: introduzca la descripción de la imagen aquí