Открыть сервис

Graphviz: система визуализации графов

Graphviz (сокр. от англ. Graph Visualization Software) — это набор открытых программных инструментов для визуализации структурных данных в виде графов и сетей, разработанный в исследовательской лаборатории AT&T. Система использует собственный язык описания графов DOT и предназначена для автоматической генерации схем, диаграмм и карт связей на основе текстового описания.

История

Проект Graphviz был создан в конце 1980-х годов в исследовательском центре AT&T Bell Labs (позднее — AT&T Labs Research). Его разработчиками выступили Элефтериос Кутсофиос и Стивен Норт, которые ранее занимались созданием системы dotty для интерактивной работы с графами. Первые публичные версии Graphviz появились в начале 1990-х годов. В 2000-е годы проект распространился как свободное программное обеспечение под лицензией Eclipse Public License (ранее — Common Public License). Несмотря на то, что коммерческая поддержка со стороны AT&T была прекращена, развитие Graphviz продолжается силами сообщества, а сама система остаётся одним из стандартных инструментов для визуализации графов в академической и инженерной среде.

Язык DOT

Основой работы с Graphviz является язык DOT — простой текстовый формат описания графов. В DOT-файле определяются узлы (вершины), рёбра (связи) и их атрибуты: форма, цвет, подписи, стили линий. Синтаксис языка интуитивно понятен: граф объявляется ключевыми словами graph (для неориентированных) или digraph (для ориентированных), узлы перечисляются по именам, а связи задаются операторами -- (неориентированное ребро) или -> (ориентированная дуга). Пример описания простого ориентированного графа:

`` digraph G { A -> B; A -> C; B -> D; } ``

Язык DOT поддерживает комментарии, подграфы (кластеры), а также широкий набор атрибутов, позволяющих управлять внешним видом итогового изображения — от шрифтов и цветов до алгоритмов укладки.

Основные инструменты

Graphviz включает несколько утилит командной строки, каждая из которых реализует определённый алгоритм компоновки графа. Наиболее известные из них:

  • dot — алгоритм иерархической (слоистой) укладки для ориентированных графов; рёбра направлены преимущественно сверху вниз или слева направо. Подходит для блок-схем, деревьев и организационных диаграмм.
  • neato — алгоритм силового моделирования (spring model) для неориентированных графов; узлы располагаются так, чтобы рёбра имели примерно равную длину. Используется для сетей и кластерных структур.
  • fdp — также силовой алгоритм, но с иным подходом к минимизации энергии; даёт более плотную укладку.
  • sfdp — масштабируемая версия fdp, предназначенная для работы с графами, содержащими десятки тысяч узлов.
  • twopi — радиальная укладка, при которой один из узлов помещается в центр, а остальные распределяются вокруг него по окружностям.
  • circo — циклическая укладка, выделяющая в графе циклы и компоненты связности.

Эти утилиты принимают DOT-файл на входе и формируют изображение в одном из поддерживаемых форматов: SVG, PNG, PDF, PostScript, а также в векторных и растровых форматах для дальнейшей вставки в документы или веб-страницы.

Алгоритмы компоновки

В основе Graphviz лежат математические алгоритмы автоматического размещения вершин и рёбер. Иерархический алгоритм (используемый в dot) основан на методе Сугиямы: граф разбивается на слои по длине путей, внутри слоёв минимизируется число пересечений рёбер, а затем вычисляются координаты узлов. Силовые алгоритмы (neato, fdp) моделируют физическую систему, в которой узлы отталкиваются друг от друга, а рёбра действуют как пружины; равновесное состояние такой системы и даёт итоговую укладку. Выбор алгоритма зависит от типа графа и цели визуализации: для деревьев и иерархий обычно применяют dot, для социальных сетей и карт связей — neato или fdp.

Применение

Graphviz широко используется в различных областях, где требуется автоматическое построение схем и диаграмм:

  • Документирование программного обеспечения: генерация диаграмм классов, зависимостей модулей, графов вызовов функций. Инструменты вроде Doxygen используют Graphviz для отрисовки связей между компонентами кода.
  • Описание сетевой инфраструктуры: визуализация топологии сетей, маршрутов, связей между серверами.
  • Анализ данных и машинное обучение: отображение деревьев решений, нейронных сетей, кластерных структур.
  • Научные публикации: построение графов для статей по математике, информатике, биологии (например, филогенетических деревьев).
  • Моделирование бизнес-процессов: создание блок-схем и диаграмм потоков работ.
  • Веб-разработка: генерация диаграмм на стороне сервера для встраивания в HTML-страницы.

Благодаря текстовому формату исходных данных, Graphviz легко интегрируется в скрипты и конвейеры обработки данных, что делает его популярным при автоматическом формировании отчётов и документации.

Интеграция с другими системами

Возможности Graphviz используются в качестве библиотеки или внешнего движка во многих программных продуктах. Например, язык программирования Python имеет несколько обёрток (pydot, graphviz), позволяющих создавать графы программно; среда R предоставляет пакеты для визуализации графов на основе Graphviz. Система документации Doxygen, инструменты анализа кода и ряд wiki-движков применяют Graphviz для отображения диаграмм по текстовому описанию. Существуют также графические редакторы (например, dotty, gvedit), позволяющие просматривать и редактировать DOT-файлы в интерактивном режиме.

Ограничения

К числу недостатков Graphviz относят ограниченную интерактивность — система ориентирована на генерацию статичных изображений, а не на динамическое взаимодействие с графом. При работе с очень большими графами (сотни тысяч узлов) качество укладки может снижаться, а время расчёта — возрастать. Кроме того, автоматическая компоновка не всегда даёт эстетически идеальный результат, и для сложных схем может потребоваться ручная корректировка координат или разбиение графа на части.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →