Интерактивный просмотрщик Graphviz с базовым фильтром node/edge

Я посмотрел через страницу ресурсов Graphviz и вопросы 1 и 2 и до сих пор не нашли конкретного ответа. Моя учетная запись - это зависимость между программными компонентами (например, устанавливаемыми пакетами), и одна особенность заключается в том, что некоторые общие узлы являются целями для многих ребер. Например, почти каждый исполняемый пакет зависит от libc.

Основываясь на этом признаке, я хотел бы иметь зритель/библиотеку со следующими возможностями:

  • Использовать алгоритм компоновки "dot" в Graphviz (силовые макеты, которые изобилуют в разных библиотеках, не обеспечивают хорошего качества макета для обсуждаемого usecase).
  • Интерактивно отключить/повторно включить некоторые node в графе (пример libc выше).
  • Интерактивно отключить/снова включить все выделенные объекты из определенного node (например, libpng зависит от libz, но это очевидно и может быть отключено, чтобы не создавать помехи).
  • Корневой граф на некотором node (покажите подграф с только узлами, доступными из этого node), и "zoom back" для завершения графика.

В идеале это была бы библиотека Javascript, которая позволила бы легко реализовать более сложные возможности манипуляции. Что важно, что описанные выше основные способы просмотра, как описано выше, были доступны из коробки - опять же, я не мог найти что-то подобное, при этом многие решения были либо статическими зрителями, либо "редакторами свободной формы", позволяющими перемещать узлы вокруг, но не с чем-то с достаточно высокоуровневое и полезное поведение.

Наконец, если такого решения не существует, предложения по наилучшей структуре для реализации этих функций приветствуются.

Ответ 1

Gephi, https://gephi.org/, он поддерживает множество графических форматов, конечно, включая точку Graphviz. Он может фильтровать узлы или ребра и имеет некоторые функции анализа.

Ответ 2

Я нашел José Fonseca xdot.py, чтобы быть чрезвычайно классным приложением Python и Cairo для просмотра файлов Graphviz. Это так хорошо написано и имеет такой приятный интерфейс, что можно задаться вопросом, почему он немного пригоден в своей поддержке взаимодействия, не допуская возможности расширения из коробки. Я сейчас взламываю его на https://github.com/pfalcon/xdot.py

Обновление. Я подтвердил концепцию реализации вышеперечисленных функций как filter-viewer.py. Вероятнее всего, будет переименован позже.