Как рисовать мультиграфик в networkx, используя matplotlib или graphviz

когда я передаю матрицу смежности multigraph numpy в networkx (используя функцию from_numpy_matrix) а затем попытайтесь нарисовать график, используя matplotlib, он игнорирует множественные ребра.

как я могу заставить его нарисовать несколько ребер?

Ответы

Ответ 1

Graphviz делает хорошую работу, рисуя параллельные ребра. Вы можете использовать это с NetworkX, написав dot файл, а затем обработать Graphviz (например, neato layout ниже). Вам понадобятся pydot или pygraphviz в дополнение к 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

В NetworkX 1.11 и новее nx.write_dot не работает по проблема в networkx github. Обходным путем является вызов write_dot с помощью

from networkx.drawing.nx_pydot import write_dot

или

from networkx.drawing.nx_agraph import write_dot