Graphviz教程

Graphviz教程

Graphviz是大名鼎鼎的AT&T实验室开发的一个画图工具。它的理念和一般的“所见即所得”的画图工具不一样,是“所想即所得”。就是你想画出怎样的图,用语言定义和描述出来,Graphviz会自动用最合理的方式去渲染布局出这个图。

绘制简单的图

graphviz1

digraph是有向图,graph是无向图。在有向图中->表示连接的一条边,无向图中–表示连接的一条边,不能混用。

第一行给出了图的类型和名字。当某个节点的的名称第一次出现,它就被创建。可以在一行里创建多个相连节点的连接。

设置图、节点、边的属性

Graphviz节点默认的属性是shape = ellipse,节点的名字就是label。下面来看一个稍复杂的例子,我们可以手动设置图、节点、边的属性。

graphviz2

设置边的指向方向

graphviz3

节点的形状

节点的shape除了record和Mrecord这两种之外,其他的形状都是多边形polygon,而我们可以对多边形进行属性上的设置。sides设置边数,perihperies设置多边形的外框层数,regular=true可以让你设置规则多边形,orientation可以让你的多边形旋转一个角度,orientation=15就是旋转15度。skew后面跟一个(-1.0~1.0)的小数,能让你的图形斜切一个角度,distortion让图形产生透视效果。

graphviz4

record节点

record和Mrecord的区别就是Mrecord的角是圆的。

graphviz14

边的label

当你的线和label比较多时,可以给线的属性decorate=true,使得每条线的label与所属线之间有连线。你还可以每条线加上headlable和taillabel,给每条线的起始点和终点加上label,它们的颜色由labelfontcolor来决定,而label的颜色由fontcolor来觉得。

graphviz5

在label中加入html,创造一个table

graphviz6

创造一个5行5列的表格

graphviz7

设置方向趋势

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

graphviz8

设置边的起点,终点

设立一条边时,我们可以指定这条边从起点的哪个位置射出和从哪个位置结束。控制符有n,ne,e,se,s,sw,w,nw。

graphviz9

我们也可以在record中给节点定义一些port,它在record中都是一个个格子。

graphviz10

构造一个hash表

graphviz11

子图

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

graphviz12

当你想把一条边连到一个子图的边界上,先输入compound=true,然后就能使用lhead和ltail来设置连接子图。

graphviz13

发表评论

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