2013-06-17 12 views
1

Я пытаюсь изобразить взаимосвязь различных сущностей данных с конвейером моего ETL (извлечения трансформации). Конечным результатом является большой направленный граф. Пока я использую Python для извлечения данных. Pydot помогает мне генерировать svg-файл, который я могу открыть с помощью браузера. График, который я генерирую, является статическим.Направленный граф в python

Pydot позволяет мне настраивать всплывающую подсказку и позволяет мне связывать другие html-страницы с узлами или краями. Я ищу больше, чем это.

Небольшая часть графика показан ниже

Directed Graph

enter image description here

Хочу сделать несколько вещей с этим графиком.

  • Каждый узел может иметь несколько атрибутов (включая имя). Невозможно отобразить эти атрибуты из-за нехватки места. Но по мере того, как пользователи нажимают (или делают другие действия на основе мыши), я бы хотел, чтобы эти атрибуты отображались как «плавающая» таблица, которую пользователь может уволить, если не заинтересован.
  • Не все атрибуты узлов являются целыми или строковыми. Это могут быть и графики. Например, для одного из узлов я могу иметь гистограмму, показывающую, как часто этот объект данных загружается за последние 7 дней. Я бы хотел, чтобы эта гистограмма отображалась, когда пользователь перемещает (щелкает) мышью над этим узлом. В настоящее время я использую matplotlib для создания связанных диаграмм (см. Выше) с узлами. Я связываю эти диаграммы с моим исходным ориентированным графом, используя setURL в pydot. Но пользовательский интерфейс невелик, так как он переводит пользователя на новую страницу.
  • Я доволен компоновкой узлов и т. Д., Которые по умолчанию получаю от Pydot/GraphViz. Я предпочитаю не делать все с нуля, если это абсолютно необходимо.
  • Возможность выделить только определенную часть графика на основе запроса в узле или края атрибутов

Я читал этот форум и наткнулся на несколько вариантов в ответ на вопросы, похожие на мои.

  • gephi
  • igraph (я играл с igraph, который позволяет мне запрос на вершине или краями. Я не мог понять, как я могу сделать мой окончательный график
    интерактивной на основе пользовательского ввода, например, с плавающей таблицей на мыши над из узла и т.д.)
  • библиотеки Javascript - sigma.js, arbor.js, d3.js nodebox
  • NetworkX
  • nodebox

У меня есть навык Python, но довольно новичок на стороне Javascript. Мне хотелось бы узнать от экспертов, что может быть лучшим выбором (от функциональности и простоты использования). Предпочтительным является решение на основе браузера.

Любое предложение/помощь будет действительно оценено.

Благодаря Abhijit

ответ

1

Попробуйте NetworkX.Атрибуты узла могут быть любыми хешируемыми, чтобы адреса (по крайней мере) были первыми двумя пулями.

Вы все равно будете использовать matplotlib для создания диаграмм. Я не знаю лучшего решения, чем это.

+0

Как и NetworkX, igraph также поддерживает это, но для меня большая проблема заключается в том, как сделать интерактивный график (например, отобразить некоторые из этих атрибутов, когда пользователь взаимодействует с графиком внутри браузера, наложить диаграмму, сгенерированную с использованием matplotlib) –