python - Networkx 中的编码

标签 python python-2.7 encoding networkx

由于西里尔字符,我无法使用 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/

相关文章:

python - Django 实例建立直到崩溃站点(更新 : Redis deadlock HIGHLY suspected)

java - 从 http GET 响应获取图像作为 base64 字符串

python - 高精度的ceil函数

google-app-engine - 运行 Google App Engine 测试项目时出现 ImportError

python - 累积一个orderedDict

c++ - 使用 libmp4v2 和 OpenH264 将 h264 混合为 mp4

postgresql - 使用 'value too long' 的非 ascii 字符移动 PostgreSQL 数据库失败

python - ZenPy 搜索调用可获得最大结果

python - 如何使用 Python @singledispatch 注册 Typing.Callable?

python - 如何从 SonarQube 测试覆盖范围中排除 `if __name__ == ' __main_ _':` 下的代码