2014-04-01 11 views
5

Ho bisogno di disegnare un grafico diretto con più di un bordo (con pesi diversi) tra due nodi. Cioè, ho i nodi A e B e i bordi (A, B) con lunghezza = 2 e (B, A) con lunghezza = 3.Disegno di più spigoli tra due nodi con retex

Ho provato entrambi utilizzando G = nx.Digraph e G = nx.Multidigraph. Quando lo disegno, riesco a visualizzare solo un bordo e solo una delle etichette. C'è un modo per farlo?

+1

Vedi http://stackoverflow.com/questions/15053686/networkx-overlapping-edges-when-visualizing-multigraph e http://stackoverflow.com/questions/14943439/how-to-draw-multigraph-in-networkx-using-matplotlib-or-graphviz per informazioni. – Aric

risposta

7

provare quanto segue:

import networkx as nx 
import matplotlib.pyplot as plt 
G = nx.DiGraph() #or G = nx.MultiDiGraph() 
G.add_node('A') 
G.add_node('B') 
G.add_edge('A', 'B', length = 2) 
G.add_edge('B', 'A', length = 3) 

pos = nx.spring_layout(G) 
nx.draw(G, pos) 
edge_labels=dict([((u,v,),d['length']) 
      for u,v,d in G.edges(data=True)]) 
nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels, label_pos=0.3, font_size=7) 
plt.show() 

Questo lo restituisca questo grafico con due bordi e la lunghezza indicate sul bordo:

enter image description here

+0

puoi valutarlo come risposta accettata se ti ha aiutato a trovare una soluzione;) –

+0

Questo è probabilmente il peggior nemico quando si tratta di visualizzare e leggere grafici ponderati. È brutto, illeggibile e nel grafo orientato - l'inferno sa quale limite è quale. –

Problemi correlati