Справка по синтаксис

DOT — это язык разметки для описания графов. Его понимает Graphviz и все онлайн-инструменты вроде GraphvizOnline. Один раз написал — получил красивую схему.


1. Основа: графы

Главное в DOT — это граф. Есть два типа:

  • Граф (graph) — неориентированный, рёбра без стрелок.

  • Ориентированный граф (digraph) — со стрелками, направлениями.

graph G {      // неориентированный
  A -- B
}

digraph G {    // ориентированный
  A -> B
}

digraph используется чаще всего — для блок-схем, деревьев, зависимостей.


2. Узлы (вершины)

Узлы пишутся просто своими именами. Имена могут быть без кавычек, если без пробелов.

digraph {
  A;
  B;
  C;
}

Если имя содержит пробелы или спецсимволы — берём в кавычки:

"Узел 1";
"Узел-с-дефисом";

3. Рёбра (связи)

Соединяются узлы через -> (для digraph) или -- (для graph).

Можно задавать направление:


4. Атрибуты узлов и рёбер

Всё настраивается квадратными скобками после узла или ребра.

Для узлов

Самые частые атрибуты:

Атрибут
Что делает
Примеры значений

shape

форма узла

box, circle, ellipse, diamond, Mdiamond, Msquare, record, plaintext

color

цвет линии

red, blue, #FF00FF

fillcolor

цвет заливки

lightgrey, yellow

style

стиль

filled, dashed, dotted, bold, rounded

fontcolor

цвет текста

black, white

fontsize

размер шрифта

12, 14, 16

label

подпись (если нужно отличное от имени)

label="Старт"

width / height

размер в дюймах

0.5, 1.0

Для рёбер

Атрибут
Что делает
Примеры

color

цвет линии

red

style

стиль линии

dashed, dotted, bold

label

подпись над стрелкой

label="да"

fontcolor

цвет подписи

blue

dir

направление стрелки

forward (по умолч.), back, both, none

arrowhead / arrowtail

форма наконечника

normal, dot, box, crow, vee

weight

вес ребра (влияет на раскладку)

1 (обычное), 10 (более "сильное")


5. Глобальные настройки

Можно задать атрибуты сразу для всех узлов или рёбер:

Если потом нужно переопределить для конкретного — просто дописываешь свои скобки.


6. Кластеры (подграфы)

Кластеры — это группы узлов, которые визуально объединяются в рамку. Имя кластера обязательно должно начинаться с cluster_, иначе не сработает.

Внутри кластера могут быть свои узлы и рёбра. Атрибуты кластера (рамка, фон, подпись) задаются как у обычного графа.


7. Записи (record-узлы)

Специальная форма узла shape=record позволяет делать сложные структуры с несколькими полями.

Поля разделяются вертикальной чертой |. Можно делать вложенность:

Для доступа к отдельному полю при связи используется :


8. Комментарии

Как в обычном коде:


9. Полный пример с пояснениями

Вот тот самый пример с GraphvizOnline — разобранный по полочкам:


10. Самые частые формы узлов

Форма
Как выглядит

box

прямоугольник

circle

круг

ellipse

эллипс (по умолчанию)

diamond

ромб

Mdiamond

ромб побольше (для старта/конца)

Msquare

квадрат

record

запись с полями

plaintext

просто текст без рамки

point

точка

egg

яйцо

triangle

треугольник

invtriangle

перевёрнутый треугольник

chevron-rightДемонстрация этой фигниhashtag

11. Цвета

Можно использовать:

  • Именаred, blue, green, yellow, lightgrey, darkorange

  • HEX-коды#FF0000 (красный), #00FF00 (зелёный)

  • RGB0.1 0.2 0.3 (редко)


12. Полезные советы

  • Если граф некрасиво рисуется — поиграй с rankdir:

  • Чтобы выровнять узлы по одной линии — используй {rank=same; A B C}

  • Для больших графов помогает splines=ortho — линии только горизонтальные и вертикальные.

Последнее обновление