2013-02-18 19 views
12

quando passo la matrice di adjpty numpy di multigraph a networkx (usando la funzione from_numpy_matrix) e poi provo a disegnare il grafico usando matplotlib, ignora i bordi multipli.come disegnare multigraph in networkx usando matplotlib o graphviz

Come posso disegnare anche più spigoli?

+0

correlati http://stackoverflow.com/questions/10379448/plotting-directed-graphs-in-python-in- a-way-that-show-all-edges-separatamente e http://stackoverflow.com/questions/15053686/networkx-overlapping-edges-when-visualizing-multigraph –

+0

Peccato che non sia implementato in networkx! – famargar

risposta

12

Graphviz fa un buon lavoro disegnando bordi paralleli. È possibile utilizzarlo con NetworkX scrivendo un file di punti e quindi elaborando con Graphviz (ad esempio, il layout neato di seguito). Avrete bisogno di pydot o pygraphviz oltre a NetworkX

In [1]: import networkx as nx 

In [2]: G=nx.MultiGraph() 

In [3]: G.add_edge(1,2) 

In [4]: G.add_edge(1,2) 

In [5]: nx.write_dot(G,'multi.dot') 

In [6]: !neato -T png multi.dot > multi.png 

enter image description here

Su NetworkX 1.11 e successivi, nx.write_dot non funziona come per issue on networkx github. La soluzione consiste nel chiamare write_dot utilizzando

from networkx.drawing.nx_pydot import write_dot

o

from networkx.drawing.nx_agraph import write_dot

+0

quali versioni di networkx, pygraphviz e graphviz stai usando? – eyaler

+0

Ecco quello che ho. Ma le versioni recenti dovrebbero dare lo stesso risultato. $ python -c "import pygraphviz; stampa pygraphviz .__ version__" 1.2.dev1990 $ dot -V dot - versione graphviz 2.29.20120625.0446 (20120625,0446) $ python -c "import NetworkX; stampa NetworkX .__ version__ " 1.8.dev_20130108070258 – Aric

+0

Ho scritto lo stesso codice, utilizzato neato per generare l'immagine del grafico, ma è un grafico diretto (e non un non orientato) e mostra solo un bordo (1,2) ma non il bordo (2, 1). Perché non è orientato ????? E perché non c'è l'altro limite? Si prega di aiutare! –

Problemi correlati