Я пытаюсь изобразить взаимосвязь различных сущностей данных с конвейером моего ETL (извлечения трансформации). Конечным результатом является большой направленный граф. Пока я использую Python для извлечения данных. Pydot помогает мне генерировать svg-файл, который я могу открыть с помощью браузера. График, который я генерирую, является статическим.Направленный граф в python
Pydot позволяет мне настраивать всплывающую подсказку и позволяет мне связывать другие html-страницы с узлами или краями. Я ищу больше, чем это.
Небольшая часть графика показан ниже
Хочу сделать несколько вещей с этим графиком.
- Каждый узел может иметь несколько атрибутов (включая имя). Невозможно отобразить эти атрибуты из-за нехватки места. Но по мере того, как пользователи нажимают (или делают другие действия на основе мыши), я бы хотел, чтобы эти атрибуты отображались как «плавающая» таблица, которую пользователь может уволить, если не заинтересован.
- Не все атрибуты узлов являются целыми или строковыми. Это могут быть и графики. Например, для одного из узлов я могу иметь гистограмму, показывающую, как часто этот объект данных загружается за последние 7 дней. Я бы хотел, чтобы эта гистограмма отображалась, когда пользователь перемещает (щелкает) мышью над этим узлом. В настоящее время я использую matplotlib для создания связанных диаграмм (см. Выше) с узлами. Я связываю эти диаграммы с моим исходным ориентированным графом, используя setURL в pydot. Но пользовательский интерфейс невелик, так как он переводит пользователя на новую страницу.
- Я доволен компоновкой узлов и т. Д., Которые по умолчанию получаю от Pydot/GraphViz. Я предпочитаю не делать все с нуля, если это абсолютно необходимо.
- Возможность выделить только определенную часть графика на основе запроса в узле или края атрибутов
Я читал этот форум и наткнулся на несколько вариантов в ответ на вопросы, похожие на мои.
- gephi
- igraph (я играл с igraph, который позволяет мне запрос на вершине или краями. Я не мог понять, как я могу сделать мой окончательный график
интерактивной на основе пользовательского ввода, например, с плавающей таблицей на мыши над из узла и т.д.) - библиотеки Javascript - sigma.js, arbor.js, d3.js nodebox
- NetworkX
- nodebox
У меня есть навык Python, но довольно новичок на стороне Javascript. Мне хотелось бы узнать от экспертов, что может быть лучшим выбором (от функциональности и простоты использования). Предпочтительным является решение на основе браузера.
Любое предложение/помощь будет действительно оценено.
Благодаря Abhijit
Как и NetworkX, igraph также поддерживает это, но для меня большая проблема заключается в том, как сделать интерактивный график (например, отобразить некоторые из этих атрибутов, когда пользователь взаимодействует с графиком внутри браузера, наложить диаграмму, сгенерированную с использованием matplotlib) –