Bonky
Neither beliver nor reject anything, because any other person has rejected of believed it. Heaven has given you a mind for judging truth and error, Use it.
By Thomas Jefferson

DOT 语言

抽象语法

以下是定义DOT语言的抽象语法。 终结符以粗体显示,非终结符以斜体显示。 文字字符以单引号给出。 括号()表示需要时的分组。 方括号[]包含可选项。 竖条| 单独的选择。

graph [ strict ] (graph | digraph) [ ID ] ‘{‘ stmt_list ‘}’
stmt_list [ stmt [ ‘;’ ] stmt_list ]
stmt node_stmt|edge_stmt|attr_stmt|ID ‘=’ ID|subgraph
attr_stmt (graph | node | edge) attr_list
attr_list ‘[‘ [ a_list ] ‘]’ [ attr_list ]
a_list ID ‘=’ ID [ (‘;’ | ‘,’) ] [ a_list ]
edge_stmt (node_id | subgraph) edgeRHS [ attr_list ]
edgeRHS edgeop (node_id | subgraph) [ edgeRHS ]
node_stmt node_id [ attr_list ]
node_id ID [ port ]
port ‘:’ ID [ ‘:’ compass_pt ]|‘:’ compass_pt
subgraph [ subgraph [ ID ] ] ‘{‘ stmt_list ‘}’
compass_pt (n | ne | e | se | s | sw | w | nw | c | _)

其中关键字node,edge,graph,digraph,subgraph和strict对大小写不敏感。 ID其实就是一个字符串,上面第一第二种形式不使用引号仅仅是为了简单。在 abc_2"abc_2" 之间,2.34"2.34" 之间并没有语义差异。显然,使用关键字做为ID时必须使用引号。

基本例子

上面的是不是看得脑皮发麻?哈哈,没事上面只不过是类似属于一个语法字典的作用,接下来我们从实际例子来看看怎么使用。

如何使用 DOT 语言生成图片

首先肯定是先写好 dot 语言的源代码文件,然后我们利用以下命令生成各种格式的图片:

当然dot可以换成以下命令,区别只不过渲染的的图片不同(都是使用相同的语法):

命令 介绍
dot 渲染的图具有明确方向性。
neato 渲染的图缺乏方向性。
twopi 渲染的图采用放射性布局。
circo 渲染的图采用环型布局。
fdp 渲染的图缺乏方向性。
sfdp 渲染大型的图,图片缺乏方向性。

DOT 的 HELLO WORLD 程序

下面是一个简单的 DOT 程序:

test

我们首先看这句话 A->{B C} 以为者 A 同时指向 B 和 C,可以改写为以下形式:

然后我们看看大括号的内容:digraph testdiagraph 是对图 test 的一个申明,意味着这个图为有向图。如果我们想要改成无向图怎么办?我们只需要把 digraph 改成 graph,箭头 -> 改成 --,如下:

我们可以看看效果如下:

test

你可以注意到这里有一句代码:rankdir=LR,这个作用是转换图的延伸方向,LR 代表的是左右延伸。

给结点更换形式

我们可以类似 [label="True" fontcolor=green] 这样的形式,更换结点的颜色。

最后效果如下

test

当然,如果结点特别多的话,我们可以一键设置边和结点,利用 nodeedge 两个保留字,代码如下:

最后生成的图也是也是特别的漂亮:

test

record 语法

record 情况可以一个 node 里面装多个标签,用法如下:

test

写在最后

更多关于图形的语法,还有一些类似于 HTML 的语法写在这:http://www.graphviz.org/doc/info/shapes.html

X11颜色:http://www.graphviz.org/doc/info/colors.html

关于图像整体属性的设定:http://www.graphviz.org/doc/info/attrs.html

可选的输出的格式:http://www.graphviz.org/doc/info/output.html

www.graphviz.org_doc_info_shapes.html

Share

You may also like...

发表评论

电子邮件地址不会被公开。 必填项已用*标注