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。