как нарисовать мультиграф в networkx с помощью matplotlib или graphviz


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

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

1 15

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

Введите описание изображения здесь

На 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