Как вы получаете 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. Я смог решить проблему, убрав эти данные для целей вычисления макета. Это было достаточно для моих нужд, но если кто-то захочет более детально отследить оскорбительные данные, я приму их ответ.

Другие вопросы по тегам