2014-04-01 16 views
5

Ich muss einen gerichteten Graphen mit mehr als einer Kante (mit unterschiedlichen Gewichten) zwischen zwei Knoten zeichnen. Das heißt, ich habe Knoten A und B und Kanten (A, B) mit Länge = 2 und (B, A) mit Länge = 3.Zeichnen mehrerer Kanten zwischen zwei Knoten mit networkx

Ich habe beide mit G = nx.Digraph und G = nx.Multidigraph versucht. Wenn ich es zeichne, sehe ich nur eine Kante und nur eines der Labels. Gibt es eine Möglichkeit, es zu tun?

+1

Siehe http://stackoverflow.com/questions/15053686/networkx-überlappende-Kanten-wenn-Visualisierung-Multigraph und http://stackoverflow.com/questions/14943439/how-to-draw-multigraph-in-networkx-use-matplotlib-or-graphviz für Informationen. – Aric

Antwort

7

Versuchen Sie Folgendes:

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() 

Dadurch kehren Sie diese Grafik mit zwei Kanten und die Länge am Rand gezeigt:

enter image description here

+0

Sie können es als akzeptierte Antwort bewerten, wenn es Ihnen bei der Suche nach einer Lösung geholfen hat;) –

+0

Dies ist möglicherweise der schlimmste Feind, wenn es darum geht, gewichtete Graphen zu visualisieren und zu lesen. Es ist hässlich, unlesbar und in gerichteter Grafik - die Hölle weiß, welche Kante welche ist. –

Verwandte Themen