使用graphviz或pydot显示Networkx 2.2 MultiGraphs

时间:2018-09-26 10:01:32

标签: python-3.x networkx graphviz pygraphviz pydot

我正在使用python3.4networkx2.2graphviz2.38pygraphviz1.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:'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

0 个答案:

没有答案