Как вы получаете networkx.graphviz_layout для работы?
Я пытаюсь вычислить макеты для графика, который я построил с использованием networkx; давайте назовем график G
, Я использую Javascript для фактического рендеринга графика, поэтому все, что мне нужно сейчас, - это вычислить положения узлов, используя алгоритм компоновки. (Я не хочу использовать инструменты Javascript, такие как макеты d3 force, потому что вычисления для больших графиков занимают некоторое время, и поэтому я бы предпочел сделать тяжелую работу на стороне сервера.)
Вот строка кода, которая работает для меня и приводит к успешной визуализации графа:
layout = networkx.spring_layout(G)
Однако этот алгоритм является медленным и не очень красивым. Поэтому я решил попробовать Graphviz:
layout = networkx.graphviz_layout(G)
Я использую Python 3.4 в OSX, поэтому я сначала установил Graphviz, используя:
brew install graphviz
pip install graphviz
pip install pydotplus
(Сначала я попытался установить пакет pydot вместо pydotplus, но кажется, что пакет pydot не поддерживает Python 3.)
Когда я пытаюсь позвонить graphviz_layout
Я заканчиваю с:
AttributeError: 'NoneType' object has no attribute 'get_node'
срабатывает по линии:
node=Q.get_node(pydot_node)
в nx_pydot.py. Я надеюсь, что это известная ошибка, которую кто-то может сказать мне, как исправить, но я пока ничего не нашел. В случае, если никто не знает простого исправления, я не буду активно отговаривать людей рекомендовать другие пакеты Python, которые вычисляют (но не обязательно отображают) макеты графов, которые поддерживают большие графы, хотя кажется, что я недопустимо явно просить об этом...
1 ответ
Проблема (в моем случае) заключалась в том, что я связывал много данных с узлами в моем объекте networkx, и некоторые данные вызывали проблемы для pydot. Я смог решить проблему, убрав эти данные для целей вычисления макета. Это было достаточно для моих нужд, но если кто-то захочет более детально отследить оскорбительные данные, я приму их ответ.