我正在使用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:'agedge:no key'
在处理上述异常期间,发生了另一个异常:
回溯(最近通话最近):文件 “ 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”, to_agraph中的161行 A.add_edge(u,v,key = str(key))文件“ 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:'agedge:no key'
to_pydot
函数可以正常工作,并且控制台以点格式打印多图的多个边,如下所示
digraph {
B;
C;
A;
B -> C [key=0];
A -> B [key=0];
A -> B [key=1];
}
我的问题是,为什么to_agraph
在多重图形中出现多个边而失败?有没有一种方法可以将to_pydot
函数的输出转换为png
文件而不必使用to_agraph
?