Ошибка Python NetworkX: модуль «networkx.drawing» не имеет атрибута «graphviz_layout»

Я учу себя Python и NLTK для работы по книге "Обработка естественного языка с помощью Python" ("www.nltk.org/book").

Я застрял в главе 4, разделе 4, части 8 в NetworkX. Когда я пытаюсь запустить пример 4.15, он должен нарисовать график, но вместо этого я получаю следующее сообщение об ошибке:

AttributeError: модуль «networkx.drawing» не имеет атрибута «graphviz_layout»

Строка кода виновника выглядит так

>>> nx.draw_graphviz(graph,
    node_size = [16 * graph.degree(n) for n in graph],
    node_color = [graph.depth[n] for n in graph],
    with_labels = False)

Вот упрощенный код, заимствованный из "networkx.github.io/documentation/networkx-1.10/tutorial/tutorial.html"

>>> import networkx as nx
>>> import matplotlib.pyplot as plt
>>> G=nx.Graph()
>>> G.add_node(1)
>>> G.add_nodes_from([2,3])
>>> nx.draw_graphviz(G)  
Traceback (most recent call last):
  File "<pyshell#92>", line 1, in <module>
    nx.draw_graphviz(G)
  File "C:\Users\Cheese\AppData\Local\Programs\Python\Python35-32\lib\site-packages\networkx\drawing\nx_pylab.py", line 984, in draw_graphviz
    pos = nx.drawing.graphviz_layout(G, prog)
AttributeError: module 'networkx.drawing' has no attribute 'graphviz_layout'
>>> 

Можете ли вы сказать мне, как это исправить, пожалуйста?

Я использую домашнюю премиум-версию Windows 7, использую Python 3.5, Graphviz2.38 (и каталог для этого находится в переменной среды PATH) и NetworkX 1.11.

Я гуглил несколько раз и не могу найти ничего, что работает для меня. Я прошел учебные пособия по NetworkX и graphviz, и это тоже не помогло.

Вот что я нашел, что не помогло:

"stackoverflow.com/questions/39411102/attributeerror-module-object-has-no-attribute-graphviz-layout-with-networkx" (код ответа дал мне то же сообщение об ошибке)

"python.thenaiveapproach.com/buggy-module-installation-networkx-pygraphviz/" (в сообщении об ошибке требуется pygraphviz, который я не могу установить. pip говорит, что для запуска требуется Visual C++, и я не могу установить его на мой рабочий компьютер)

"codedump.io/share/c3aAbCneu2oA/1/attributeerror-39module39-object-has-no-attribute-39graphvizlayout39-with-networkx-111" (также требуется pygraphviz - см. выше)

Большое спасибо, Дженнифер


person Jennifer James    schedule 08.12.2016    source источник
comment
если у вас не установлен pygraphviz (а также graphviz), networkx не может рисовать графики с помощью этого движка. Вы можете проверить, достаточно ли для ваших целей других бэкендов, включая draw_networkx.   -  person Bonlenfum    schedule 09.12.2016
comment
также обратите внимание на первый абзац в документах networkx, который предлагает использовать специальный инструмент для построения графиков. Один из способов — сохранить файл в соответствующем формате, а затем использовать другой инструмент для внешнего рисования.   -  person Bonlenfum    schedule 09.12.2016
comment
Это сработало, спасибо! Вот что я сделал: ››› nx.draw(G) ››› plt.savefig(simple_path.png) ››› plt.show()   -  person Jennifer James    schedule 09.12.2016


Ответы (1)


Ответ любезно предоставлен @Bonlenfum и кодом из https://networkx.github.io/documentation/networkx-1.10/examples/drawing/simple_path.html

Вот код, который работал:

>>> import networkx as nx
>>> import matplotlib.pyplot as plt
>>> G=nx.Graph()
>>> G.add_node(1)
>>> G.add_nodes_from([2,3])
>>> nx.draw(G)
>>> plt.savefig("simple_path.png")
>>> plt.show()

А вот исправленный код из книги NLTK:

try:
    import matplotlib.pyplot as plt
except:
    raise

def graph_draw(graph):
    nx.draw(graph,
         node_size = [16 * graph.degree(n) for n in graph],
         node_color = [graph.depth[n] for n in graph],
         with_labels = False)
person Jennifer James    schedule 09.12.2016