2013-02-18 14 views
12

kiedy przekazuję multigraficzną matrycę przyległości do siecix (przy użyciu funkcji from_numpy_matrix) , a następnie spróbuj narysować wykres za pomocą matplotlib, to ignoruje wiele krawędzi.jak narysować multigraph w networkx przy użyciu matplotlib lub graphviz

w jaki sposób mogę narysować wiele krawędzi?

+0

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

+0

Szkoda, że ​​nie jest zaimplementowany w networkx! – famargar

Odpowiedz

12

Firma Graphviz wykonuje dobrą pracę rysując równoległe krawędzie. Możesz użyć tego z NetworkX, pisząc plik kropki, a następnie przetwarzając go za pomocą Graphviz (na przykład układ neato poniżej). Musisz pydot lub pygraphviz oprócz 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

Na NetworkX 1.11 i nowsze, nx.write_dot nie działa zgodnie issue on networkx github. Rozwiązaniem jest wywołanie write_dot użyciu

from networkx.drawing.nx_pydot import write_dot

lub

from networkx.drawing.nx_agraph import write_dot

+0

z jakich wersji networkx, pygraphviz i graphviz korzystasz? – eyaler

+0

Oto, co mam. Ale ostatnie wersje powinny dawać taki sam rezultat. $ python -c "import pygraphviz; print pygraphviz .__ version__" 1.2.dev1990 $ dot -V kropka - wersja Graphviz 2.29.20120625.0446 (20120625,0446) $ python -c „import NetworkX; print NetworkX .__ version__ " 1.8.dev_20130108070258 – Aric

+0

Napisałem ten sam kod, użyłem neato do wygenerowania obrazu wykresu, ale jest on skierowanym wykresem (a nie nieukierunkowanym) i pokazuje tylko krawędź (1,2), ale nie krawędź (2, 1). Dlaczego nie jest nieukierunkowany? I dlaczego nie ma drugiej krawędzi? Pomóżcie! –

Powiązane problemy