节点形状
基于记录的形状在很大程度上已被 HTML 类标签 取代并大大推广。也就是说,人们可以考虑使用 shape=none
、margin=0
和 HTML 类标签,而不是使用 shape=record
。
所有节点形状的几何形状和样式都受节点属性 fixedsize
、fontname
、fontsize
、height
、label
、style
和 width
的影响。
基于多边形的节点
下面显示了所有可能的基于多边形的形状。
如上图所示,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 形状与记录形状相同,只是最外层的框具有圆角。通过将字段嵌套在大括号“{...}”中来在水平布局和垂直布局之间切换。记录中的顶层方向是水平的。因此,标签为“A | B | C | D”的记录将具有 4 个字段,从左到右排列,而“{A | B | C | D}”将从上到下排列,而“A | { B | C } | D”将具有“B”在“C”上方,以及“A”在“B”和“C”的左侧,“D”在“B”和“C”的右侧。
记录节点的初始方向取决于 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
形状只是设置此样式的简写。此外,在 2005 年 4 月 26 日之前,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 类标签
注意:此功能仅适用于 2003 年 11 月中旬以后版本的 Graphviz。特别是,它不属于版本 1.10。
注意:粗体、斜体、下划线、下标和上标的字体标记 (<B>
、<I>
、<U>
、<SUB>
和 <SUP>
) 仅在 2011 年 10 月 14 日之后的版本中可用,而删除线标记 (<S>
) 需要 2013 年 9 月 15 日之后的版本。此外,所有这些标记目前仅通过 cairo 和 svg 渲染器可用。水平线和垂直线 (<HR>
和 <VR>
) 仅在 2011 年 7 月 8 日之后的版本中可用。
注意:对于 2014 年 9 月 9 日之后的版本,可以使用 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 一样,元素和属性名称不区分大小写。(参见 HTML 4.01 规范 的第 3.2.1 节和第 3.2.2 节)。
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> |
所有非打印字符(如制表符或换行符)将被忽略。在上面,string 是任何可打印字符的集合,包括空格。对于表格,在 <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"
- 指定对象周围边框的宽度(以磅为单位)。值为零表示没有边框。默认值为 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。有关更多信息,请参见 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"
- 指定要显示在单元格中的图像文件。请注意,如果软件用作 Web 服务器,则对图像的文件系统访问权限更加严格。参见 SERVER_NAME.
- STYLE
- 指定表格或单元格的样式特征。样式特征以逗号或空格分隔的样式属性列表形式给出。目前,唯一合法的属性是
ROUNDED
和RADIAL
用于表格,RADIAL
用于单元格。如果指定了ROUNDED
,则表格将具有圆角。这可能最适合最外层的单元格没有边框,或者它们的CELLSPACING
足够大。如果希望在单元格周围有边框,请使用 HR 和 VR 元素,或 COLUMNS 和 ROWS 属性 TABLE。RADIAL
属性表示径向渐变填充。参见 BGCOLOR 和 GRADIENTANGLE 属性。 - TARGET="value"
- 确定如果对象具有 URL,则使用浏览器中的哪个窗口来显示 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 类标签示例
重新创建记录示例
点输入
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 等)输出。更多信息可以在页面 如何创建自定义形状 上找到。
用于 PostScript 的 SDL 形状
CSR 的 Mark Rison 提供了一个用户定义的节点形状示例。这些是 SDL 形状。这些形状作为 PostScript 函数提供,其用法在 外部 PostScript 过程 中进行了描述。必要的 PostScript 库文件和示例用法可以在发行版中的 contrib/sdlshapes
目录中找到。请注意库文件 sdl.ps
中包含的版权和许可声明。
下表列出了形状名称及其对应的节点形状