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系统,请尝试:
或一般而言,对于Python 2.x,请尝试:
您可以通过以下方式编辑行
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文件
然后在命令行上执行适当的graphviz输出命令,例如