Дисплей Networkx 2.2 MultiGraphs с использованием Graphviz или Pydot - PullRequest
0 голосов
/ 26 сентября 2018

Я использую python3.4, networkx2.2, graphviz2.38 и pygraphviz1.3 для создания и отображения графиков в Python.У меня есть следующий фрагмент кода, который правильно записывает мультиграф в файл png.

import networkx as nx
import pylab as plt
from networkx.drawing.nx_agraph import graphviz_layout, to_agraph
from networkx.drawing.nx_pydot import write_dot, to_pydot

ic_G = nx.MultiDiGraph()
ic_G.add_nodes_from(['A', 'B', 'C'])
nx.add_path(ic_G, ['A', 'B', 'C'])
#ic_G.add_edge('A','B')

dot_G = to_pydot(ic_G)
print(dot_G)


A = to_agraph(ic_G)
A.layout('dot')
A.draw('abc.png')

Консоль показывает мультиграф в правильном формате, как показано ниже

digraph  {
B;
A;
C;
B -> C  [key=0];
A -> B  [key=0];
}

иследующий файл записан в том же каталоге:

multidigraph

Проблема возникает, когда я добавляю повторяющиеся ребра в мультиграф, т.е. когда я отменяю комментарий в следующей строкеиз приведенного выше кода

#ic_G.add_edge('A','B')

Я получаю следующее исключение на консоли

Трассировка (последний последний вызов): Файл "C: \ Users \ Basit \ Anaconda3 \ envs\ python34 \ lib \ site-packages \ pygraphviz \ agraph.py ", строка 478, в add_edge eh = gv.agedge (self.handle, uh, vh, key, _Action.create) KeyError: 'agege: нет ключа'

Во время обработки вышеупомянутого исключения произошло другое исключение:

Traceback (последний вызов был последним): файл "D: /GitHub/misc/BP_Graphs/test2.py", строка 16, вA = to_agraph (ic_G) Файл "C: \ Users \ Basit \ Anaconda3 \ envs \ python34 \ lib \ site-packages \ networkx\ drawing \ nx_agraph.py ", строка 161, в to_agraph A.add_edge (u, v, key = str (ключ)) Файл" C: \ Users \ Basit \ Anaconda3 \ envs \ python34 \ lib \ site-packages \ pygraphviz\ agraph.py ", строка 481, в add_edge eh = gv.agedge (self.handle, uh, vh, key, _Action.find) KeyError: 'agege: нет ключа'

The *Функция 1032 * работает нормально, и консоль печатает несколько ребер мультиграфа в точечном формате, как показано ниже

digraph  {
B;
C;
A;
B -> C  [key=0];
A -> B  [key=0];
A -> B  [key=1];
}

Мой вопрос: почему to_agraph не работает для нескольких ребер в мультиграфе?Есть ли способ преобразовать вывод функции to_pydot в файл png, не используя to_agraph?

...