由于西里尔字符,我无法使用 networkx 绘制图表。
import networkx as nx
G = nx.Graph()
s = "СукупністьЇЄ"
G.add_node(s.decode('utf-8'))
nx.draw_graphviz(G)
我正在得到
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "/Library/Python/2.7/site-packages/networkx-1.10-py2.7.egg/networkx/drawing/nx_pylab.py", line 982, in draw_graphviz
pos = nx.drawing.graphviz_layout(G, prog)
File "/Library/Python/2.7/site-packages/networkx-1.10-py2.7.egg/networkx/drawing/nx_pydot.py", line 257, in graphviz_layout
return pydot_layout(G=G,prog=prog,root=root,**kwds)
File "/Library/Python/2.7/site-packages/networkx-1.10-py2.7.egg/networkx/drawing/nx_pydot.py", line 296, in pydot_layout
node = node[0]
IndexError: list index out of range
我尝试将 nx_pydot 文件中的第 #296 行更改为
node = node[:2]
之后的行 (#297) 为
pos=node.get_pos()[2:-2]
假设西里尔字母符号占用两个字节,但没有任何改变。
我在 Mac 上使用 Python 2.7.5,在 networkx 1.10 上使用。
最佳答案
我从 networkx 开发者 Aric 那里得到了帮助。
根据他的说法,问题是我使用了 graphviz 的 pydot 接口(interface),它似乎不适用于 unicode
# -*- coding: utf-8 -*-
import networkx as nx
import matplotlib.pyplot as pl
labels={}
graph = nx.Graph()
words= ["сукупність","вдача","волосся","колектив"]
for word in words:
w = word.decode('utf-8')
graph.add_node(w)
labels[w]=w
graph.add_edge("сукупність".decode('utf-8'),"вдача".decode('utf-8'))
graph.add_edge("сукупність".decode('utf-8'),"волосся".decode('utf-8'))
graph.add_edge("сукупність".decode('utf-8'),"колектив".decode('utf-8'))
pos=nx.spring_layout(graph)
# pos=nx.drawing.pydot_layout(graph) # doesn't work with unicode
# pos=nx.drawing.pygraphviz_layout(graph) # this also works, pygraphviz
nx.draw_networkx(graph, pos=pos, labels=labels)
pl.show()
关于python - Networkx 中的编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33722923/