2013-02-24 21 views
10

Il seguente piazzole multigrafo correttamente (cioè bordi paralleli non si sovrappongono) utilizzando graphviz neato per generare un png (come mostrato in this answer)NetworkX: bordi sovrapposti durante la visualizzazione multigrafo

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 

Tuttavia utilizzando la funzione di disegno di NetworkX non fa il trucco

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

E 'possibile evitare i bordi sovrapposti usando i metodi di estrazione di Networkx?

Grazie

risposta

8

Sfortunatamente no. È tecnicamente possibile fare ma finora nessuno ha scritto il codice.

+0

correlati, alludendo al punto in cui questo deve essere aggiunto in NetworkX: https://groups.google.com/forum/#!msg/networkx-discuss/K6QYbpBDUfk/1GqbsiocpCAJ –

0

Beh, so che probabilmente non è quello che stai cercando, ma ero di fronte a un problema simile in cui volevo avere un grafico diretto in cui il bordo tra due nodi aveva un peso diverso a seconda della direzione (se fosse entrando o uscendo dal nodo) e il lavoro che ho fatto è stato che ho usato un colore diverso per ogni spigolo e ho diminuito l'opacità di uno di essi in modo che fosse visibile anche se si sovrappongono. Avevo solo bisogno di due spigoli tra i miei due nodi, quindi ho fatto il trucco per me.

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

Problemi correlati