graphviz dot简介

dot语言介绍

1.介绍

Graphviz 的好处在于,你只需要关心数据结构的流程,或者连接的方式,而不需要考虑布局。这是经典的*nix的程序的工作方式,比如latex, mate等等,都是采用这种方式来工作的。既可以达到WYTIWYG(What you think is what you get),而不是微软所提倡的WYSIWYG(What you see is what you get)。而dot则是graphviz中的默认布局方式。
dot是一门非常有意思的语言,它能够方便的通过文字描述绘制图片。
每种工具都有自己的适用场景的,那么dot语言的适用场景是什么呢?我认为是不复杂的流程图和架构图设计
为什么这么说?在画架构图的时候,我们希望在设计架构的过程中,不需要时刻考虑排版问题,而是考虑到架构的本质。
当设计完成之后,我们希望能够根据我们的思路自动生成一副图出来。这样让我们专心做事。

例子

那么dot是不是真的那么神奇,能将我们所想的画出来?我们先看看dot的语法
digraph G {
main -> parse -> execute;
main -> init;
main -> cleanup;
execute -> make_string;
execute -> printf;
init -> make_string;
main -> printf;
execute -> compare;
}
保存为g1.dot
生成图片:dot -Tpng g1.dot >g1.png
-T 输出图片格式,这里选用png。
生成图片如右图。

2.绘图相关属性:
2.1  node节点描述

node(节点)一般默认为ellipse形状, 宽度.75, 高度.5   ,虽然上述节点形状很多,估计看着也眼花,当时常用就以下4个:
box
circle
record
plaintext

faq:
如何添加node 形状信息
node1[shape=box];  设置节点的形状为box。
node1[label=”点1”];设置节点的名字为“点1”

node的显示名字:
node节点可以用label来声明node节点的名字。
fifod1[label=“fifod”];

2.2 dir关系
dir关系是dot语言中比较重要的一环
比如T->H;
“forward”  :

“back” :      

”both“:         

“none”:        

在dot中定义dir属性:
T->H[dir=back];

2.3连接点的方向

我们可以用“n”,”ne”,”e”,””se”, “sw”,”w”,”nw”,
分别表示冲哪一个方向连接这个节点(图形)-“north, northeast……”
如下的dot代码:

digraph G{
//b->c[tailport = se];
b->c:se;
}

箭头指向c的东南方向
如图为:

其他方向如有兴趣可以把剩下的7个不同方向都试试。

2.4  label 属性
label 可以用来指示连接线的属性,也可以用来指定node的名字;

3 子图,点线的位置:
默认时图中的线都是从上到下的,我们可以将其改为从左到右,在文件的最上层打入rankdir=LR就是从左到右,默认是TB(top -> bottom),也可以是RL,BT。
当图中时间表之类的东西时,我们会需要点能排在一行(列),这时要用到rank,用花括号把rank=same,然后把需要并排的点一次输入。

digraph cs_version {
rankdir=LR;
{
node[shape = plaintext];
2000 -> 2001 -> 2002 -> 2003 ;
}
{
node[shape = box, style = filled];
1.0 -> 1.3 -> 1.5 -> 1.6 ;
1.0 -> 1.1
}
{rank=same; 2000 ; 1.0 }
{rank=same; 2001 ; 1.1 ; 1.3 }
{rank=same; 2002 ; 1.5 }
{rank=same; 2003 ; 1.6 }

}

子图:
画一个子图就是subgraph cluster#,必须有cluster前缀。

digraph G {
subgraph cluster0 {
node [style=filled,color=white];
style=filled;
color=lightgrey;
a0 -> a1 -> a2 -> a3;
label = "process #1" ;
}
subgraph cluster1 {
node [style=filled];
b0 -> b1 -> b2 -> b3;
label = "process #2" ;
color=blue
}
start -> a0;
start -> b0;
a1 -> b3;
b2 -> a3;
a3 -> a0;
a3 -> end;
b3 -> end;
start [shape=Mdiamond];
end [shape=Msquare];
}


当你想把一条边连到一个子图的边界上,先输入compound = true,然后就能用lhead和ltail来设置连接的子图了。
附录:内容引用来源:

http://www.graphviz.org/pdf/dotguide.pdf

http://www.graphviz.org/doc/info/shapes.html

此条目是由 admin 发表在 Linux 分类目录的。将 固定链接加入收藏夹。 

你可能感兴趣的:(graphviz,dot)