Формы узлов
Существует три основных типа форм: на основе многоугольников, на основе записей и определяемые пользователем.
Форма на основе записей во многом устарела и была значительно обобщена благодаря HTML-подобным меткам. То есть вместо использования shape=record можно рассмотреть возможность использовать shape=none, margin=0 и HTML-подобную метку.
На геометрию и стиль всех форм узлов влияют атрибуты узлов fixedsize, fontname, fontsize, height, label, style и width.
Узлы на основе многоугольников
Ниже показаны возможные формы на основе многоугольников.
box
polygon
ellipse
oval
circle
point
egg
triangle
plaintext
plain
diamond
trapezium
parallelogram
house
pentagon
hexagon
septagon
octagon
doublecircle
doubleoctagon
tripleoctagon
invtriangle
invtrapezium
invhouse
Mdiamond
Msquare
Mcircle
rect
rectangle
square
star
none
underline
cylinder
note
tab
folder
box3d
component
promoter
cds
terminator
utr
primersite
restrictionsite
fivepoverhang
threepoverhang
noverhang
assembly
signature
insulator
ribosite
rnastab
proteasesite
proteinstab
rpromoter
rarrow
larrow
lpromoter
Как видно на рисунках, формы rect и rectangle являются синонимами box, а none — синоним plaintext. Форма plain похожа на эти две, но дополнительно обеспечивает width=0 height=0 margin=0, гарантируя, что фактический размер узла полностью определяется меткой. Это полезно, например, при использовании HTML-подобных меток. Кроме того, в отличие от остальных, эти три формы, а также underline, показаны без style=filled, чтобы продемонстрировать обычный вариант использования. Если включить заливку, текст метки будет отображаться в залитом прямоугольнике.
На геометрию форм на основе многоугольников также влияют атрибуты узлов regular, peripheries и orientation. Если задано shape="polygon", также используются атрибуты sides, skew и distortion. Если они не заданы, по умолчанию используются значения 4, 0.0 и 0.0 соответственно. Форма точки является особой: на неё влияют только атрибуты peripheries, width и height.
Обычно размер узла определяется минимальной шириной и высотой, необходимыми для размещения его метки и изображения, если оно есть, с отступом, заданным атрибутом margin. Ширина и высота также должны быть не меньше размеров, заданных атрибутами width и height, которые указывают минимальные значения этих параметров. Способы ограничения размера узла описаны в документации к атрибуту fixedsize. В частности, если задано fixedsize=shape, форма узла фиксируется атрибутами width и height, и эта форма используется для завершения рёбер, однако для предотвращения перекрытия узлов учитываются и размеры формы, и размеры метки. Например, следующий граф:
digraph G {
{
node [margin=0 fontcolor=blue fontsize=32 width=0.5 shape=circle style=filled]
b [fillcolor=yellow fixedsize=true label="a very long label"]
d [fixedsize=shape label="an even longer label"]
}
a -> {c d}
b -> {c d}
}
даёт следующий рисунок:
Обратите внимание, что метка жёлтого узла с fixedsize=true перекрывает другой узел, хотя места достаточно для серого узла с fixedsize=shape.
Формы note, tab, folder, box3d и component предоставлены Pander. Формы для синтетической биологии promoter, cds, terminator, utr, primersite, restrictionsite, fivepoverhang, threepoverhang, noverhang, assembly, signature, insulator, ribosite, rnastab, proteasesite, proteinstab, rpromoter, rarrow, larrow и lpromoter добавлены Jenny Cheng.
Узлы на основе записей
ПРИМЕЧАНИЕ: См. примечание об узлах на основе записей. Также учтите, что при использовании нетривиальных рёбер (рёбер с портами или метками) между соседними узлами на одном ранге могут возникать проблемы, если один или оба узла имеют форму записи.
Эти формы задаются значениями "record" и "Mrecord". Структура узла на основе записи определяется его атрибутом label, который соответствует следующей грамматике:
| rlabel | = | field ( '|' field )* |
| где field | = | fieldId или '{' rlabel '}' |
| а fieldId | = | [ '<' string '>'] [ string ] |
Если фигурные скобки, вертикальные черты и угловые скобки должны отображаться как обычные символы, их необходимо экранировать обратной косой чертой. Пробелы интерпретируются как разделители между токенами, поэтому их нужно экранировать, если они должны присутствовать в тексте.
Первая строка в fieldId задаёт имя порта для поля и может объединяться с именем узла, указывая место присоединения ребра к узлу. (См. portPos.) Вторая строка используется как текст поля; в ней поддерживаются обычные последовательности экранирования \n, \l и \r.
Визуально запись представляет собой прямоугольник, поля которого образованы чередующимися рядами горизонтальных или вертикальных подпрямоугольников. Форма Mrecord идентична форме record, за исключением того, что углы внешнего прямоугольника скруглены. Переключение между горизонтальной и вертикальной компоновкой выполняется путём заключения полей в фигурные скобки "{...}". На верхнем уровне запись имеет горизонтальную ориентацию. Таким образом, запись с меткой "A | B | C | D" будет содержать 4 поля, расположенных слева направо, а "{A | B | C | D}" расположит их сверху вниз, и "A | { B | C } | D" поместит "B" над "C", "A" — слева от "B" и "C", а "D" — справа от них.
Начальная ориентация узла-записи зависит от атрибута rankdir. Если этот атрибут имеет значение TB (по умолчанию) или BT, соответствующее вертикальной компоновке, поля верхнего уровня записи отображаются горизонтально. Если же атрибут имеет значение LR или RL, соответствующее горизонтальной компоновке, поля верхнего уровня отображаются вертикально.
В качестве примера узла-записи рассмотрим dot-ввод:
digraph structs {
node [shape=record];
struct1 [label="<f0> left|<f1> mid\ dle|<f2> right"];
struct2 [label="<f0> one|<f1> two"];
struct3 [label="hello\nworld |{ b |{c|<here> d|e}| f}| g | h"];
struct1:f1 -> struct2:f0;
struct1:f2 -> struct3:here;
}
даёт следующий рисунок:
Если добавить строку:
rankdir=LR
получим следующую компоновку:
Если изменить форму узла struct1 на Mrecord, он будет выглядеть так:
Стили узлов
Атрибут style можно использовать для изменения внешнего вида узла. В настоящее время распознаются 8 значений стиля: filled, invisible, diagonals, rounded. dashed, dotted, solid и bold. Как обычно, значением атрибута style может быть разделённый запятыми список любых из этих значений. При конфликте стилей (например, style="dotted, solid") применяется последний атрибут.
filled- Это значение указывает, что внутреннюю область узла следует залить. Используется цвет
fillcolorузла или, если он не задан, егоcolor. У незалитых узлов внутренняя область прозрачна и отображает текущий цвет фона графа или кластера. Обратите внимание, что формыpointвсегда залиты.Таким образом, следующий код:
digraph G { rankdir=LR node [shape=box, color=blue] node1 [style=filled] node2 [style=filled, fillcolor=red] node0 -> node1 -> node2 }даёт следующий рисунок:
invisible- При установке этого стиля узел не отображается. Обратите внимание, что узел по-прежнему участвует в компоновке графа.
diagonals- Стиль diagonals приводит к тому, что возле вершин многоугольника узла рисуются небольшие хорды, а для кругов и эллипсов — две хорды возле верхней и нижней частей формы. Специальные формы узлов
Msquare,McircleиMdiamondпредставляют собой обычные квадрат, круг и ромб со включённым стилем diagonals. rounded- Стиль rounded сглаживает углы многоугольника. Обратите внимание, что этот стиль также применяется к узлам на основе записей. Форма
Mrecord— это просто сокращённая запись для установки данного стиля. Кроме того, до 26 апреля 2005 года стили rounded и filled нельзя было использовать одновременно.В качестве примера скругления dot использует граф:
digraph R { rankdir=LR node [style=rounded] node1 [shape=box] node2 [fillcolor=yellow, style="rounded,filled", shape=diamond] node3 [shape=record, label="{ a | b | c }"] node1 -> node2 -> node3 }чтобы получить рисунок:
dashed- Этот стиль задаёт пунктирную границу узла.
dotted- Этот стиль задаёт границу узла в виде точечной линии.
solid- Этот стиль задаёт сплошную линию границы узла, используемую по умолчанию.
bold- Этот стиль задаёт жирную линию границы узла. См. также penwidth.
Для некоторых генераторов кода могут быть доступны дополнительные стили.
HTML-подобные метки
ПРИМЕЧАНИЕ: Эта возможность доступна только в версиях Graphviz, выпущенных после середины ноября 2003 года. В частности, её нет в выпуске 1.10.
ПРИМЕЧАНИЕ: Разметка шрифта для полужирного, курсивного, подчёркнутого, подстрочного и надстрочного текста (<B>, <I>, <U>, <SUB> и <SUP>) доступна только в версиях, выпущенных после 14 октября 2011 года, а разметка зачёркивания (<S>) требует версий новее 15 сентября 2013 года. Кроме того, все эти виды разметки в настоящее время доступны только в средствах визуализации cairo и svg. Горизонтальные и вертикальные линии (<HR> и <VR>) доступны только в версиях, выпущенных после 8 июля 2011 года.
ПРИМЕЧАНИЕ: В выпусках после 9 сентября 2014 года можно использовать shape=plain, чтобы размер узла полностью определялся меткой. В противном случае значения отступа, ширины и высоты узла могут привести к его увеличению, из-за чего рёбра будут обрезаны вдали от метки. Фактически, shape=plain — это сокращённая запись для shape=none width=0 height=0 margin=0.
Если значение атрибута метки (label для узлов, рёбер, кластеров и графов, а также атрибуты headlabel и taillabel ребра) задано как HTML-строка, то есть ограничено <...>, а не "...", метка интерпретируется как HTML-описание. В простейшем случае такие метки могут задавать несколько строк текста с различным выравниванием, как и обычные строковые метки. В более общем случае метка может задавать таблицу, подобную HTML-таблице, с различными графическими атрибутами на каждом уровне.
Поскольку HTML-строки обрабатываются как HTML-код, при использовании символов ", &, < и > в обычном тексте или значениях атрибутов их необходимо заменять соответствующими последовательностями экранирования. Например, если требуется использовать & в значении href, его следует записать как &.
ПРИМЕЧАНИЕ: Возможности и синтаксис этих меток основаны на HTML. Однако многие аспекты, важные для меток Graphviz, отсутствуют в HTML, и, наоборот, HTML допускает конструкции, не имеющие смысла в Graphviz. Обычно мы будем называть эти метки «HTML-метками», а не громоздким термином «HTML-подобные метки», однако следует помнить, что это не настоящий HTML. Приведённая ниже грамматика точно описывает, что принимает Graphviz.
Хотя HTML-метки, строго говоря, не являются формой, их можно считать обобщением форм записей, описанных выше. В частности, если для узла атрибут shape установлен в none или plaintext, HTML-метка становится формой узла. Если же узлу задана любая другая форма (кроме point), HTML-метка будет встроена в узел так же, как обычная метка. Не рекомендуется добавлять HTML-метки к формам на основе записей (record и Mrecord): из-за конфликтующих схем меток и дублирующей функциональности это может привести к неожиданному поведению.
Ниже приведена абстрактная грамматика HTML-меток. Терминалы, соответствующие элементам, выделены полужирным шрифтом, а нетерминалы — курсивом. Квадратные скобки [ и ] обозначают необязательные элементы. Вертикальные черты | разделяют альтернативы. Обратите внимание, что, как и в HTML, имена элементов и атрибутов нечувствительны к регистру (ср. разделы 3.2.1 и 3.2.2 спецификации HTML 4.01).
| label | : | text |
| | | fonttable | |
| text | : | textitem |
| | | text textitem | |
| textitem | : | string |
| | | <BR/> | |
| | | <FONT> text </FONT> | |
| | | <I> text </I> | |
| | | <B> text </B> | |
| | | <U> text </U> | |
| | | <O> text </O> | |
| | | <SUB> text </SUB> | |
| | | <SUP> text </SUP> | |
| | | <S> text </S> | |
| fonttable | : | table |
| | | <FONT> table </FONT> | |
| | | <I> table </I> | |
| | | <B> table </B> | |
| | | <U> table </U> | |
| | | <O> table </O> | |
| table | : | <TABLE> rows </TABLE> |
| rows | : | row |
| | | rows row | |
| | | rows <HR/> row | |
| row | : | <TR> cells </TR> |
| cells | : | cell |
| | | cells cell | |
| | | cells <VR/> cell | |
| cell | : | <TD> label </TD> |
| | | <TD> <IMG/> </TD> |
Все непечатаемые символы, такие как табуляции и символы новой строки, игнорируются. Выше строка — это любая последовательность печатаемых символов, включая пробелы. В таблицах символы пробелов игнорируются, в том числе пробелы, за пределами содержимого элемента <TD>; внутри элемента <TD> пробелы сохраняются, но все остальные символы пробелов отбрасываются. Примечание. По техническим причинам, если таблица заключена в элемент шрифта, например <FONT> или <B>, любой пробел непосредственно перед ним или после него приведет к синтаксической ошибке. Например, метка
< <U><TABLE><TR><TD>a</TD></TR></TABLE></U>>
недопустима. Чтобы исправить это, удалите пробел или <U>...</U>.
В строке HTML допускаются комментарии HTML. Они могут находиться в любом месте при условии, что, если они содержат часть элемента HTML, то должны содержать этот элемент целиком.
Как очевидно из приведенного выше описания, интерпретация символов пробелов — одно из тех мест, где метки, подобные HTML, существенно отличаются от стандартного HTML. В HTML любая последовательность символов пробелов сворачивается в один пробел. Если пользователь не хочет, чтобы это происходило, необходимо использовать неразрывные пробелы . Это имеет смысл в HTML, где расположение текста динамически зависит от доступного пространства. В Graphviz расположение статически определяется входными данными, поэтому обычные пробелы разумно считать неразрывными. Кроме того, игнорирование табуляций и символов новой строки позволяет форматировать входной текст для удобства чтения.
У каждого элемента HTML есть набор необязательных атрибутов. Значения атрибутов должны заключаться в двойные кавычки.
- Элемент таблицы
-
<TABLE ALIGN="CENTER|LEFT|RIGHT" BGCOLOR="color" BORDER="value" CELLBORDER="value" CELLPADDING="value" CELLSPACING="value" COLOR="color" COLUMNS="value" FIXEDSIZE="FALSE|TRUE" GRADIENTANGLE="value" HEIGHT="value" HREF="value" ID="value" PORT="portName" ROWS="value" SIDES="value" STYLE="value" TARGET="value" TITLE="value" TOOLTIP="value" VALIGN="MIDDLE|BOTTOM|TOP" WIDTH="value" >
- Строка таблицы
-
<TR <!-- No attributes --> >
- Ячейка таблицы
-
<TD ALIGN="CENTER|LEFT|RIGHT|TEXT" BALIGN="CENTER|LEFT|RIGHT" BGCOLOR="color" BORDER="value" CELLPADDING="value" CELLSPACING="value" COLOR="color" COLSPAN="value" FIXEDSIZE="FALSE|TRUE" GRADIENTANGLE="value" HEIGHT="value" HREF="value" ID="value" PORT="portName" ROWSPAN="value" SIDES="value" STYLE="value" TARGET="value" TITLE="value" TOOLTIP="value" VALIGN="MIDDLE|BOTTOM|TOP" WIDTH="value" >
- Задание шрифта
-
<FONT COLOR="color" FACE="fontname" POINT-SIZE="value" >
- Разрыв строки
-
<BR ALIGN="CENTER|LEFT|RIGHT" />
- Вставка изображения
-
<IMG SCALE="FALSE|TRUE|WIDTH|HEIGHT|BOTH" SRC="value" />
- Курсивное начертание
-
<I <!-- No attributes --> >
- Полужирное начертание
-
<B <!-- No attributes --> >
- Подчеркивание текста
-
<U <!-- No attributes --> >
- Надчеркивание текста
-
<O <!-- No attributes --> >
- Подстрочный текст
-
<SUB <!-- No attributes --> >
- Надстрочный текст
-
<SUP <!-- No attributes --> >
- Зачеркнутый текст
-
<S <!-- No attributes --> >
- Горизонтальная линия
-
<HR <!-- No attributes --> />
- Вертикальная линия
-
<VR <!-- No attributes --> />
- ALIGN
- задает горизонтальное выравнивание. Если объекту выделено больше места, чем требуется, это значение определяет, где будет размещено дополнительное пространство — слева или справа от объекта.
-
CENTERвыравнивает объект по центру. (Значение по умолчанию) -
LEFTвыравнивает объект по левому краю. -
RIGHTвыравнивает объект по правому краю. - (только для
<TD>)TEXTвыравнивает строки текста по всей ширине ячейки. Выравнивание строки определяется связанным с ней (возможно, неявно) элементом<BR>.
Содержимое ячейки обычно выравнивается как единый блок. В частности, строки текста сначала выравниваются как текстовый блок, ширина которого определяется самой длинной строкой и соответствующими элементами
<BR>. Затем весь текстовый блок выравнивается внутри ячейки. Однако если значение ALIGN ячейки равноTEXTи ячейка содержит строки текста, строки выравниваются по ширине всей доступной области ячейки. Если ячейка не содержит текста, находящееся в ней изображение или таблица размещается по центру. -
- BALIGN
- задает выравнивание по умолчанию для элементов
<BR>, содержащихся в ячейке. То есть, если у элемента<BR>не задан явный атрибут ALIGN, его значение определяется значением BALIGN. - BGCOLOR="color"
- задает цвет фона. Этот цвет может быть переопределен атрибутом BGCOLOR во вложенных элементах. Значением может быть один цвет или два цвета, разделенные двоеточием; во втором случае задается градиентная заливка.
- BORDER="value"
- задает ширину границы вокруг объекта в пунктах. Значение 0 означает отсутствие границы. Значение по умолчанию — 1. Максимальное значение — 255. Если атрибут задан для таблицы, а CELLBORDER не задан, это значение используется также для всех ячеек таблицы. Его можно переопределить атрибутом BORDER в ячейке.
- CELLBORDER="value"
- задает ширину границ всех ячеек таблицы. Значение можно переопределить тегом BORDER в ячейке. Максимальное значение — 127.
- CELLPADDING="value"
- задает расстояние в пунктах между границей ячейки и ее содержимым. Значение по умолчанию — 2. Максимальное значение — 255.
- CELLSPACING="value"
- задает расстояние в пунктах между ячейками таблицы и между ячейкой и границей таблицы. Значение по умолчанию — 2. Максимальное значение — 127.
- COLOR="color"
- задает цвет шрифта в области действия
<FONT>...</FONT>либо цвет границы таблицы или ячейки в области действия<TABLE>...</TABLE>или<TD>...</TD>. Этот цвет может быть переопределен атрибутом COLOR во вложенных элементах. По умолчанию цвет шрифта определяется атрибутом fontcolor соответствующего узла, ребра или графа, а цвет границы — атрибутом color соответствующего узла, ребра или графа. - COLSPAN="value"
- задает количество столбцов, занимаемых ячейкой. Значение по умолчанию — 1. Максимальное значение — 65535.
- COLUMNS="value"
- задает общие параметры форматирования столбцов. В настоящее время единственное допустимое значение —
*; оно добавляет вертикальную линию между всеми ячейками каждой строки. - FACE="fontname"
- задает шрифт в области действия
<FONT>...</FONT>. Его можно переопределить атрибутом FACE во вложенных элементах. По умолчанию имя шрифта определяется атрибутом fontname соответствующего узла, ребра или графа. - FIXEDSIZE
- задает, следует ли соблюдать значения атрибутов WIDTH и HEIGHT.
- GRADIENTANGLE="value"
- задает угол градиентной заливки, если BGCOLOR представляет собой список цветов. Для градиента с линейным переходом, используемого по умолчанию, этот параметр задает угол линии, проходящей через центр и вдоль которой происходит переход между цветами. Поэтому угол 0 задает переход слева направо. Для радиальных градиентов (см. STYLE) угол задает положение центра заливки. Угол 0 помещает центр в середину таблицы или ячейки; ненулевой угол размещает центр заливки вдоль этого направления, ближе к границе.
- HEIGHT="value"
- задает минимальную высоту объекта в пунктах. Высота включает содержимое, промежутки и границу. Если FIXEDSIZE не имеет значения true, высота будет увеличена, чтобы вместить содержимое. Максимальное значение — 65535.
- HREF="value"
- добавляет объекту URL. Обратите внимание:
"value"обрабатывается как escString аналогично атрибуту URL. - ID="value"
- позволяет пользователю задать уникальный идентификатор таблицы или ячейки. Дополнительную информацию см. в описании атрибута id. Обратите внимание:
"value"обрабатывается как escString аналогично атрибуту id. - POINT-SIZE="value"
- задает размер шрифта в пунктах в области действия
<FONT>...</FONT>. Его можно переопределить атрибутом POINT-SIZE во вложенных элементах. По умолчанию размер шрифта определяется атрибутом fontsize соответствующего узла, ребра или графа. - PORT="value"
- добавляет объекту имя порта. (См. portPos.) Это можно использовать для изменения головного или хвостового конца ребра, чтобы его конец присоединялся непосредственно к объекту.
- ROWS="value"
- задает общие параметры форматирования строк. В настоящее время единственное допустимое значение —
*; оно добавляет горизонтальную линию между всеми строками. - ROWSPAN="value"
- задает количество строк, занимаемых ячейкой. Значение по умолчанию — 1. Максимальное значение — 65535.
- SCALE
- задает, как изображение будет использовать свободное пространство в ячейке. Допустимые значения:
-
FALSE: сохранять исходный размер изображения. (Значение по умолчанию) -
TRUE: равномерно масштабировать изображение, чтобы оно поместилось. -
WIDTH: растянуть изображение по ширине, чтобы заполнить ячейку -
HEIGHT: растянуть изображение по высоте, чтобы заполнить ячейку -
BOTH: растянуть изображение по ширине и высоте, чтобы заполнить ячейку. Если этот атрибут не задан, изображение наследует значение атрибута imagescale графового объекта, который отображается. Как и в случае атрибута imagescale, если ячейка имеет фиксированный размер, а изображение слишком велико, превышающие размеры будут уменьшены, чтобы изображение поместилось; если задано SCALE="true", масштабирование будет равномерным по ширине и высоте. Обратите внимание: атрибуты ALIGN и VALIGN содержащей ячейки имеют приоритет над атрибутом SCALE изображения.
-
- SIDES="value"
- задает, какие стороны границы ячейки или таблицы следует отрисовать, если граница включена. По умолчанию отрисовываются все стороны. Строка
"value"может содержать любые сочетания символов'L','T','R'или'B'(регистр не учитывается), обозначающих соответственно левую, верхнюю, правую и нижнюю стороны границы. Например,SIDES="LB"указывает, что следует отрисовать только левый и нижний сегменты границы. - SRC="value"
- задает файл изображения, которое следует показать в ячейке. Обратите внимание: если программа используется в качестве веб-сервера, доступ к изображениям в файловой системе более ограничен. См. SERVER_NAME.
- STYLE
- задает параметры стиля таблицы или ячейки. Параметры стиля указываются списком атрибутов стиля, разделенных запятыми или пробелами. В настоящее время для таблиц допустимы только атрибуты
ROUNDEDиRADIAL, а для ячеек —RADIAL. Если заданоROUNDED, углы таблицы будут скруглены. Вероятно, лучше всего это работает, если у крайних ячеек нет границ или их значениеCELLSPACINGдостаточно велико. Если требуется добавить границы вокруг ячеек, используйте элементы HR и VR либо атрибуты COLUMNS и ROWS элемента TABLE.Атрибут
RADIALзадает радиальную градиентную заливку. См. атрибуты BGCOLOR и GRADIENTANGLE. - TARGET="value"
- определяет, в каком окне браузера будет открыт URL объекта, если он задан. См. документацию W3C. Обратите внимание:
"value"обрабатывается как escString аналогично атрибуту target. - TITLE="value"
- задает всплывающую подсказку для элемента. Она используется, только если у элемента есть атрибут
HREF. Обратите внимание:"value"обрабатывается как escString аналогично атрибуту tooltip. - TOOLTIP="value"
- является псевдонимом атрибута TITLE.
- VALIGN
- задает вертикальное выравнивание. Если объекту выделено больше места, чем требуется, это значение определяет, где будет размещено дополнительное пространство — над объектом или под ним.
-
MIDDLEвыравнивает объект по центру. (Значение по умолчанию) -
BOTTOMвыравнивает объект по нижнему краю. -
TOPвыравнивает объект по верхнему краю.
-
- WIDTH="value"
- задает минимальную ширину объекта в пунктах. Ширина включает содержимое, промежутки и границу. Если FIXEDSIZE не имеет значения true, ширина будет увеличена, чтобы вместить содержимое. Максимальное значение — 65535.
Для некоторых атрибутов предусмотрено наследование. Если для таблицы заданы значения CELLPADDING, CELLBORDER или BORDER, эти значения используются для ячеек таблицы, если не переопределены. Если для ячейки или таблицы задан BGCOLOR, этот цвет фона применяется ко всем вложенным элементам. Разумеется, если для графового объекта, которому принадлежит метка, задан цвет фона или заливки, он будет исходным цветом фона метки. Атрибуты fontname, fontcolor и fontsize объекта используются по умолчанию при отрисовке текста. Их можно переопределить с помощью элемента FONT, задав новые значения. Новые значения шрифта сохраняются, пока их не переопределит вложенный элемент FONT. Наконец, в качестве цвета границы используется pencolor или color графового объекта.
Если требуется равномерно добавить в таблицу горизонтальные или вертикальные линии, рассмотрите возможность использования атрибутов COLUMNS или ROWS вместо множества элементов HR и VR.
Из-за некоторых ограничений, связанных с обработкой таблиц независимо от устройства, при значении BORDER, равном 1, если границы таблицы и ячеек включены, а значение CELLSPACING меньше 2, в результате могут возникнуть аномалии, например промежутки между сторонами границ, которые должны соприкасаться или даже лежать на одной прямой. Обычно пользователь может устранить эту проблему, увеличив размер границы или промежуток либо отключив границу таблицы.
Примеры меток, подобных HTML
Воспроизведение примера с записью
Входные данные dot:
digraph structs {
node [shape=plaintext]
struct1 [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
<TR><TD>left</TD><TD PORT="f1">mid dle</TD><TD PORT="f2">right</TD></TR>
</TABLE>>];
struct2 [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
<TR><TD PORT="f0">one</TD><TD>two</TD></TR>
</TABLE>>];
struct3 [label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4">
<TR>
<TD ROWSPAN="3">hello<BR/>world</TD>
<TD COLSPAN="3">b</TD>
<TD ROWSPAN="3">g</TD>
<TD ROWSPAN="3">h</TD>
</TR>
<TR>
<TD>c</TD><TD PORT="here">d</TD><TD>e</TD>
</TR>
<TR>
<TD COLSPAN="3">f</TD>
</TR>
</TABLE>>];
struct1:f1 -> struct2:f0;
struct1:f2 -> struct3:here;
}
создает HTML-аналог приведенного выше примера с записью:
Как обычно, спецификация HTML более многословна.
Более сложный пример
С другой стороны, метки HTML гораздо универсальнее:
digraph G {
rankdir=LR
node [shape=plaintext]
a [
label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
<TR><TD ROWSPAN="3" BGCOLOR="yellow">class</TD></TR>
<TR><TD PORT="here" BGCOLOR="lightblue">qualifier</TD></TR>
</TABLE>>
]
b [shape=ellipse style=filled
label=<
<TABLE BGCOLOR="bisque">
<TR>
<TD COLSPAN="3">elephant</TD>
<TD ROWSPAN="2" BGCOLOR="chartreuse"
VALIGN="bottom" ALIGN="right">two</TD>
</TR>
<TR>
<TD COLSPAN="2" ROWSPAN="2">
<TABLE BGCOLOR="grey">
<TR><TD>corn</TD></TR>
<TR><TD BGCOLOR="yellow">c</TD></TR>
<TR><TD>f</TD></TR>
</TABLE>
</TD>
<TD BGCOLOR="white">penguin</TD>
</TR>
<TR>
<TD COLSPAN="2" BORDER="4" ALIGN="right" PORT="there">4</TD>
</TR>
</TABLE>>
]
c [
label=<long line 1<BR/>line 2<BR ALIGN="LEFT"/>line 3<BR ALIGN="RIGHT"/>>
]
subgraph { rank=same b c }
a:here -> b:there [dir=both arrowtail=diamond]
c -> b
d [shape=triangle]
d -> c [label=<
<TABLE>
<TR>
<TD BGCOLOR="red" WIDTH="10"> </TD>
<TD>Edge labels<BR/>also</TD>
<TD BGCOLOR="blue" WIDTH="10"> </TD>
</TR>
</TABLE>>
]
}
создает:
Пример со шрифтами
Пример с использованием элементов <FONT>:
digraph structs {
node [shape=plaintext];
struct1 [label=<<TABLE>
<TR>
<TD>line 1</TD>
<TD BGCOLOR="blue"><FONT COLOR="white">line2</FONT></TD>
<TD BGCOLOR="gray"><FONT POINT-SIZE="24.0">line3</FONT></TD>
<TD BGCOLOR="yellow"><FONT POINT-SIZE="24.0" FACE="ambrosia">line4</FONT></TD>
<TD>
<TABLE CELLPADDING="0" BORDER="0" CELLSPACING="0">
<TR>
<TD><FONT COLOR="green">Mixed</FONT></TD>
<TD><FONT COLOR="red">fonts</FONT></TD>
</TR>
</TABLE>
</TD>
</TR>
</TABLE>>];
}
создает:
Пример с изображениями
Использование элемента <IMG>:
digraph structs {
node [shape=plaintext];
struct1 [label=<<TABLE>
<TR><TD><IMG SRC="eqn.png"/></TD></TR>
<TR><TD>caption</TD></TR>
</TABLE>>];
}
создает:
Пример со сторонами границы
Атрибут sides (версия 2.37 и новее) позволяет объединять ячейки, образуя различные невыпуклые фигуры. Например, узел tee-shaped
digraph {
tee [shape=none margin=0 label=
<<table border="0" cellspacing="0" cellborder="1">
<tr>
<td width="9" height="9" fixedsize="true" style="invis"></td>
<td width="9" height="9" fixedsize="true" sides="ltr"></td>
<td width="9" height="9" fixedsize="true" style="invis"></td>
</tr>
<tr>
<td width="9" height="9" fixedsize="true" sides="tlb"></td>
<td width="9" height="9" fixedsize="true" sides="b"></td>
<td width="9" height="9" fixedsize="true" sides="brt"></td>
</tr>
</table>>]
}
создает:
Формы узлов, определяемые пользователем
Существует третий тип формы узла, который задается пользователем. Обычно такие формы зависят от особенностей конкретного графического формата. В настоящее время формы можно описывать с помощью PostScript — через файл или библиотеку расширений — для использования в выводе PostScript. Также формы можно задавать файлом растрового изображения для использования при выводе в SVG или растровые форматы (JPEG, GIF и т. д.). Дополнительную информацию см. на странице Как создавать пользовательские формы.
Формы SDL для PostScript
Один из примеров форм узлов, определяемых пользователем, предоставлен Марком Райсоном из CSR. Это формы SDL. Они доступны в виде функций PostScript; описание их использования приведено в разделе Внешние процедуры PostScript. Необходимый файл библиотеки PostScript и примеры использования находятся в каталоге contrib/sdlshapes дистрибутива. Обратите внимание на УВЕДОМЛЕНИЕ ОБ АВТОРСКИХ ПРАВАХ И РАЗРЕШЕНИИ, содержащееся в файле библиотеки sdl.ps.
В таблице ниже приведены названия форм и соответствующие формы узлов:
© 2025 The Graphviz Authors
Licensed under the Eclipse Public License 1.0.
https://www.graphviz.org/doc/info/shapes.html