Python 3.x 使用graphviz或pydot显示Networkx 2.2多图

Python 3.x 使用graphviz或pydot显示Networkx 2.2多图,python-3.x,networkx,graphviz,pygraphviz,pydot,Python 3.x,Networkx,Graphviz,Pygraphviz,Pydot,我正在使用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

我正在使用
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];
}
digraph  {
B;
C;
A;
B -> C  [key=0];
A -> B  [key=0];
A -> B  [key=1];
}
并将以下文件写入同一目录:

当我在多重图中添加重复边时,即当我从上面的代码中取消注释下面的行时,问题就出现了

#ic_G.add_edge('A','B')
我在控制台上得到以下异常

回溯(最近一次调用上次):文件 “C:\Users\Basit\Anaconda3\envs\python34\lib\site packages\pygraphviz\agraph.py”, 第478行,添加_边 eh=gv.agedge(self.handle,呃,vh,key,_Action.create)key错误:“agedge:无键”

在处理上述异常期间,发生了另一个异常:

回溯(最近一次调用上次):文件 “D:/GitHub/misc/BP_Graphs/test2.py”,第16行,在 A=到绘图(ic)文件“C:\Users\Basit\Anaconda3\envs\python34\lib\site packages\networkx\drawing\nx\u agraph.py”, 第161行,在to_agraph中 A.add_edge(u,v,key=str(key))文件“C:\Users\Basit\Anaconda3\envs\python34\lib\site packages\pygraphviz\agraph.py”, 第481行,添加_边 eh=gv.agedge(self.handle,呃,vh,key,_Action.find)key错误:“agedge:无键”

to_pydot
功能工作正常,console以点格式打印multigraph的多条边,如下所示

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

我的问题是,为什么在多重图中,
to\u agraph
对多条边失败?有没有一种方法可以将
to_pydot
函数的输出转换为
png
文件,而不必使用
to agraph

可以使用
write\u png
函数将
Dot
对象写入
png
文件。所以剩下的唯一问题是为什么
to_agraph
在出现多条边的情况下抛出异常?我无法用python 2.7或python 3.5重现您的错误;两者都产生了多图版本ok。这个github问题看起来很相似:一位主要开发人员指出问题在(py)graphviz中。您使用的是哪个版本的
networkx
pygraphviz
?我还怀疑这是
pygraphviz
graphviz
问题。我可以用pydot来渲染多图。在py2中,pygraphviz是1.3.1,networkx是2.1。在py3中,pygraphviz为1.5,networkx=2.2。