关于graphviz:Python 3 networkx draw_graphviz()不起作用

Python 3 networkx draw_graphviz() does not work

我只想用Python 3 networkx和graphviz绘制一个简单的图形:

1
2
3
4
import networkx as nx

G = nx.complete_graph(3)
nx.draw_graphviz(G)

我正在使用ubuntu14.04和IPython3,并且像往常一样,我确实在pip3上安装了networkx并运行代码给了我:

1
ImportError: pydot could not be loaded: http://code.google.com/p/pydot/

我尝试安装pydotplus并运行代码:

1
2
3
4
5
6
7
8
/usr/local/lib/python3.4/dist-packages/networkx/drawing/nx_pydot.py in pydot_layout(G, prog, root, **kwds)
    294
    295         if isinstance(node,list):
--> 296             node=node[0]
    297         pos=node.get_pos()[1:-1] # strip leading and trailing double quotes
    298         if pos != None:

IndexError: list index out of range

和pydot2还:

1
2
3
4
5
6
7
8
/usr/local/lib/python3.4/dist-packages/pydot.py in write(self, path, prog, format)
   1893             prog = self.prog
   1894
-> 1895         dot_fd = file(path,"w+b")
   1896         if format == 'raw':
   1897             data = self.to_string()

NameError: name 'file' is not defined

我已经花了很多时间搜索和安装其他pydot和pygraphviz组合,但是仍然没有运气。

虽然这可能是相关的:
pydot和graphviz错误:无法导入dot_parser,将无法加载点文件,但这不能解决Python 3中的问题。


这似乎与您使用的pydot是与使用文件(...)的Python 3不兼容的版本相同。 file(...)已在Python 3中删除。

我注意到了这个问题,并在PyPi上设置了Python 3兼容版本。

对于适用于Python 3.x的Linux系统,请尝试:

pip3 install pydot3

或一般而言,对于Python 2.x,请尝试:

pip install pydot3


您可以通过以下方式编辑行#292来解决此问题:

1
    pydot_node = pydot.Node(make_str(n)).get_name().encode('utf-8')

在最后删除编码:

1
    pydot_node = pydot.Node(make_str(n)).get_name() #.encode('utf-8')

我在这里报告了这个错误/修复。


这不是一个很好的答案,但是可以解决。

首先输出.dot文件
networkx.write_dot(G, 'graph.dot')使用Python

然后在命令行上执行适当的graphviz输出命令,例如neato -T png graph.dot > graph.png