Я работаю над изучением визуализации графа Python. Я нашел несколько сообщений в блогах, которые делают некоторые вещи я хотел попробовать. К сожалению, я не зашел слишком далеко, столкнувшись с этой ошибкой: AttributeError: 'module' object has no attribute 'graphviz_layout'
Самый простой фрагмент кода, который воспроизводит ошибку в моей системе, это
In [1]: import networkx as nx
In [2]: G=nx.complete_graph(5)
In [3]: nx.draw_graphviz(G)
------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-3-481ad1c1771c> in <module>()
----> 1 nx.draw_graphviz(G)
/usr/lib/python2.7/site-packages/networkx/drawing/nx_pylab.pyc in draw_graphviz(G, prog, **kwargs)
982 See networkx.draw_networkx() for a description of optional keywords.
983 """
--> 984 pos = nx.drawing.graphviz_layout(G, prog)
985 draw(G, pos, **kwargs)
986
AttributeError: 'module' object has no attribute 'graphviz_layout'
Я нашел похожую questions и сообщения с трудностями с это комбо, но не совсем та же ошибка. Один из них был закрыть, но он автоматически разрешил себя.
Сначала я проверил все необходимые пакеты для NetworkX и PyGraphViz (в котором перечислены аналогичные требования к Scipy).
Далее я искал snips для тестирования моей установки этих модулей в Python. Первые два примера взяты из NetworkX Справочная документация. В этом перечислены несколько примеров срезов, использующих как MatPlotLib, так и GraphViz.
Пример кода MatPlotLib работает для меня (отображает изображение на экране),
In [11]: import networkx as nx
In [12]: G=nx.complete_graph(5)
In [13]: import matplotlib.pyplot as plt
In [13]: nx.draw(G)
In [13]: plt.show()
Тем не менее, GraphViz snips также генерируют подобные ошибки,
In [16]: import networkx as nx
In [17]: G=nx.complete_graph(5)
In [18]: H=nx.from_agraph(A)
------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-18-808fa68cefaa> in <module>()
----> 1 H=nx.from_agraph(A)
AttributeError: 'module' object has no attribute 'from_agraph'
In [19]: A=nx.to_agraph(G)
------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-19-32d1616bb41a> in <module>()
----> 1 A=nx.to_agraph(G)
AttributeError: 'module' object has no attribute 'to_agraph'
In [20]: print G
complete_graph(5)
Затем я попробовал страницу руководства PyGraphViz на Макет и чертеж. У этого есть и некоторые ножницы. PyGraphViz передан с выводами Neato (по умолчанию), PyDot и Circo Post Script (с использованием Gimp). (Единственное различие заключается в том, что эти примеры PyGraphViz не отображаются на дисплее, а в файлах).
In [1]: import pygraphviz as pgv
In [2]: d={'1': {'2': None}, '2': {'1': None, '3': None}, '3': {'2': None}}
In [3]: A=pgv.AGraph(d)
In [4]: A.write("pygraphviz_test_01.dot")
In [5]: A.layout()
In [6]: A.draw('pygraphviz_test_01.png')
Добавление к сложности, PyGraphViz требует, чтобы для работы были созданы пакетные файлы GraphViz. Я использую Arch Linux и устанавливаю эту дистрибутивную версию. Arch Linux имеет пример для тестирования установки (опять же, вывод в файл) , который также прошел.
Что мне не хватает? Что может заставить NetworkX и PyGraphViz работать в одиночку, но не вместе?