Graphviz — это пакет различных утилит, предназначенных для автоматической визуализации графов, заданных в виде описания на языке DOT.
Введение
Одним из самых больших разделов дискретной математики является теория графов, которую повсеместно используют специалисты при решении разных задач в различных областях жизнедеятельности людей. Теория графов изучает особенности построения графов, их параметры, характеристики и свойства. Граф представляет собой множество точек и линий, соединяющих эту совокупность точек. Основоположником теории графов является Леонард Эйлер, который решил популярную в его бытность задачу о Кенигсбергских мостах.
С графами всегда легче работать визуально, чем просто ими оперировать. Визуализацию графов можно выполнить при помощи программного пакета Graphviz.
Визуализация графов при помощи программного пакета Graphviz
Graphviz является программным пакетом, предназначенным для визуализации графов и сетей. Он имеет в своем составе следующую коллекцию программ-фильтров:
- Программа dot, которая является программой, предназначенной для рисования направленных графов.
- Программа neato, которая является программой, предназначенной для рисования ненаправленных графов.
- Программа circo, которая является программой, предназначенной для рисования круговых диаграмм, и другие.
Данные программы способны в различном порядке расположить элементы графа. Синтаксис Graphviz является достаточно простым. Формировать направленный тип графов можно при помощи объекта digraph. К примеру, граф, имеющий вершины «a» и «b», и связь, идущую из первой вершины ко второй вершине, в программе Graphviz может быть представлен следующим образом:
digraph {
a -> b
}
А далее, если выполнить сохранение этой совокупности команд в файле c расширением gv, к примеру, как g.gv, то этот файл может быть откомпилирован одной из программ-фильтров:
$ dot g.gv -Tpng -o g.png dot g.gv -Tpng -o g.png
Тут осуществлен экспорт в png, но, следует отметить, что и другие форматы тоже поддерживаются.
Форма вершин может изменяться через атрибут node, а форму связей (стрелок) можно менять при помощи edge. К примеру:
digraph {
node $[$shape=box, fontsize=10$]$;
edge$[$arrowsize=.4$]$;
a -> b
}
Эти команды могут сделать вершины прямоугольными, имеющими шрифт размером 10, а стрелки будет иметь размер 0.4.
Отдельные связи тоже можно менять по желанию пользователя. Делать это следует сразу за описанием связи в квадратных скобках. В примере ниже связь a->b получит подпись, имеющую размер 12:
digraph {
a -> b $[$label="This is label", fontsize=12$]$;
b -> c;
}
Комментарии могут вставляться также, как и в С++:
- Многострочные комментарии имеют вид / com /.
- Однострочные комментарии имеют вид // com.
Установка программы является очень простой, поскольку Graphviz входит в состав практически всех известных дистрибутивов, которые ориентированы на пользователя. К примеру, пользователям применяющим Fedora, CentOS и другие rpm-дистрибутивы с yum, нужно просто задать исполнение команды:
yum install Graphviz
Кроме того, в дистрибутивах имеются пакеты, которые позволяют применять Graphviz со многими языками программирования, такими как, Perl, Python, PHP, Tcl/TK и так далее.
Использование Graphviz является также достаточно простым процессом, то есть, все делается через командную строку. Пользователь должен сделать файл, в котором, на определенном языке будет содержаться описание необходимого ему графа, а далее ему следует запустить утилиту из комплекта Graphviz, которая из данного файла сформирует другой файл, содержащий в себе уже сам прорисованный граф.
Рассмотрим простой пример, а именно, сформируем файл example1.gv вида:
digraph HelloWorld {
"Hello" -> "World";
}
А затем отобразим его в виде изображения в формате PNG:
dot -Tpng example1.gv -oexample1.png
Рисунок 1. Изображения в формате PNG. Автор24 — интернет-биржа студенческих работ
Как уже было сказано выше, прорисовку графа можно получить не только в формате PNG, но и в других форматах, то есть, в SVG-графике, встраиваемой в web-страницу, и PDF, и PostScript, VML и так далее.
Естественно, Graphviz позволяет выполнить намного больше операций, чем просто прорисовка примитивного графа, который был использован в предыдущем примере. И хотя при помощи Graphviz можно формировать схемы, которые могут только отдаленно быть похожими на графы, тем не менее, Graphviz является именно средством для прорисовки графов.
В пакете программ Graphviz используются следующие термины:
- Термин node, который обозначает узел графа. Как правило, представляет собой какую-нибудь фигуру из библиотеки встроенных фигур.
- Термин edge, который означает в переводе «край», но в Graphviz обладает совсем другим значением. Как правило, это стрелка, которая соединяет node, то есть, узлы графа.
- Термин subgraph означает подграф, включаемый в основной граф. То есть это самостоятельная область графа, способная включать в себя другие узлы и затем самостоятельно прорисовываться в графе.
- Термин cluster, то есть, «кластер», является разновидностью подграфа, которая способна обладать меткой и выделенной областью, выделяемой цветом.
- Термин атрибут является именованным параметром, способным изменить оформление или поведение графа, подграфа, node или edge. Количество атрибутов достаточно большое.
Graphviz по умолчанию настроен на применение UTF-8, то есть, это позволяет использовать символы русского алфавита в названии узлов графа. Однако следует помнить, что лучше заключать любые имена в двойные кавычки, хотя Graphviz и позволяет применять имена, состоящие имена из одного слова, не содержащие разделительных знаков без кавычек.
Когда пользователь использует совокупность однотипных фигур и стрелок, но не тех, которые установлены по умолчанию, то значительно удобней сначала установить нужные умолчания, которые будут задействованы для всего графа. К примеру, умолчание:
node $[$shape="box"$]$
edge $[$dir="both"$]$
Оно ведет к тому, что вместо эллипсов, внешний вид узлов будет иметь вид прямоугольников, а все стрелки будут иметь два конца, которые указывают в обоих направлениях.