example directed python python-2.7 matplotlib graphviz networkx

directed - networkx python example



Networkx: bordes superpuestos al visualizar MultiGraph (2)

Bueno, sé que probablemente no es lo que estás buscando, pero me enfrentaba a un problema similar en el que quería tener un gráfico dirigido donde el borde entre dos nodos tenía un peso diferente dependiendo de la dirección (si entraba o salía) del nodo) y el trabajo que hice fue que utilicé un color diferente para cada borde y disminuí la opacidad para uno de ellos, por lo que se mostraría incluso si se superponen. Solo necesitaba dos bordes entre mis dos nodos, así que funcionó el truco para mí.

G = nx.DiGraph() G.add_nodes_from([0,1]) pos = nx.circular_layout(G) nx.draw_networkx_nodes(G, pos, node_color = ''r'', node_size = 100, alpha = 1) nx.draw_networkx_edges(G, pos, edgelist = [(0,1)], width = 2, alpha = 0.5, edge_color=''b'') nx.draw_networkx_edges(G, pos, edgelist= [(1,0)], width = 1, alpha = 1) plt.axis(''off'') plt.show()

enter image description here

Los siguientes gráficos multigrafiados correctamente (es decir, los bordes paralelos no se superponen) usando graphviz neato para generar un png (como se muestra en esta respuesta )

import networkx as nx nx.MultiGraph ([(1,2),(1,2),(1,2),(3,1),(3,2)]) nx.write_dot(Gm,''multi.dot'') !neato -T png multi.dot > multi.png

Sin embargo, usar la función de dibujar de Networkx no hace el truco

nx.draw_graphviz(Gm,prog=''neato'')

¿Es posible evitar la superposición de bordes utilizando los métodos de dibujo de Networkx?

Gracias


Lamentablemente no. Es técnicamente posible de hacer, pero hasta ahora nadie ha escrito el código.