02.dot语法
DOT
是Graphviz定义图形的领域特定语言,通过编写DOT
脚本,完成各种结构图形的定义,布局引擎解析DOT
脚本并完成布局和渲染,输出成各种格式以满足需求。
Graphviz的文件后缀名为.gv
,每个.gv
文件代表一个图形。可以使用各种布局引擎来解析生成不同样式的图形。DOT
语法非常简单。
抽象语法
DOT
语言的官方抽象语法说明参见:
https://graphviz.gitlab.io/_pages/doc/info/lang.html
以下是一些总结:
注释
DOT
支持 C++ 样式的注释:/* */
和//
声明graph
格式如下:
[ strict ] (graph | digraph) [ ID ] '{' stmt_list '}'
使用digraph 图形名
可以声明一个有向图,使用graph 图形名
可以声明一个无向图。
示例
digraph g{
a->b
}
graph g{
a--b
}
声明subgraph
subgraph的声明格式如下:
[ subgraph [ ID ] ] '{' stmt_list '}'
subgraph
关键字和ID标识不是必须的。subgraph有三个作用
分组
subgraph可用于分组图形结构,让某些节点和边应分组在一起。
digraph t{
A -> {B C}
}
等同于
digraph t{
A -> B
A -> C
}
统一属性
subgraph可以为分组的节点设置统一的属性。
digraph g{
subgraph {
node [shape = box, color = red]
A; B; C;
}
}
特殊布局
如果subgraph的名称以cluster
开头,Graphviz会将子图记为特殊的cluster。如果布局引擎支持cluster,则会将属于cluster的节点绘制在一起,并将subgraph的整个图形包含在矩形边框内。
digraph g{
graph [compound=true]
subgraph cluster_001{
label="cluster_001"
node [shape = box, color = red]
A; B; C;
}
subgraph cluster_002{
label="cluster_002"
node [shape = box, color = green]
D; E; F;
}
subgraph cluster_003{
label="cluster_003"
node [shape = box, color = blue]
G; H;
}
A->E
F->G
A->G[lhead=cluster_003,ltail=cluster_001 ]
B->F
}
cluster subgraph不是
DOT
语言的一部分,并不是所有布局引擎都遵守这个语法约定。注意:subgraph会继承上级图形的属性。
strict修饰符
图可以以strict
修饰,表示严格模式,此模式禁止创建多个Edge(翻译为“边缘”,在Graphviz中表现为图形的关联关系)。
示例:
strict graph {
a -- b
a -- b
b -- a [color=blue]
}
上图a
与b
之间只会有一个Edge,颜色为蓝色。
Node的声明
格式如下:
node_id [ attr_list ]
示例:
digraph g{
graph [bgcolor=red]
A[color=blue,fontcolor=green]
A->B
}
Node常用的属性:
- shape - 设置结点形状,Graphviz支持的图形参见: Node Shapes
- label - 设置结点的显示内容,内容用双引号包含,可以使用转义字符。可以在结点中内容与结点名称不相同时使用
- style - 设置结点的样式,取值:
filled
(填充) ,invisible
(不可见) ,diagonals
(斜线) ,rounded
(圆角) ,dashed
(虚线) ,dotted
(点构成的线) ,solid
(实线) ,bold
(加粗),可以是多个以,
分割的值 - color - 设置边框颜色
- fillcolor - 设置填充颜色,仅style = filled时有效。颜色列表参见: Color Names
- width - 设置结点宽度
- height - 设置结点高度
- peripheries - 设置结点边框个数
- fontcolor - 设置结点内容颜色
Edge声明
(node_id | subgraph) ( '->' | '--' ) (node_id | subgraph) [ attr_list ]
示例
digraph g{
A -> B [style = dashed, label = "from A to B"];
}
Edge的常用属性:
- style - 设置边的形状
- label - 设置边标签。内容用双引号包含,可以使用转义字符
- color - 设置边颜色
- arrowhead - 设置结点箭头样式 参见: Arrow Shapes
元素属性
DOT
可以为图,节点,Edge设置属性,格式如下:
(graph | node | edge) '[' [ a_list ] ']' [ attr_list ]
完整的属性列表,参见: Node, Edge and Graph Attributes
示例:
digraph g{
graph [bgcolor=green]
node [color=blue,shape=polygon, sides=5]
edge [color=red]
a->b
}
对于图,属性设置可以写在graph []
里,也可以写在外面
digraph g {
bgcolor = red;
graph [bgcolor = red];
}