Я использую 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];
}
иследующий файл записан в том же каталоге:
Проблема возникает, когда я добавляю повторяющиеся ребра в мультиграф, т.е. когда я отменяю комментарий в следующей строкеиз приведенного выше кода
#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
?