graphviz快速上手

来源:互联网 发布:c专家编程 txt 编辑:程序博客网 时间:2024/06/04 19:34

         graphviz最初是AT&T实验室用来画流程图的工具,使用dot语言。其中根据图的类型可以分为有向图(dirgraph)和无向图(graph)。我们知道图是由点(node)和边(edge)组成的,在有向图中边使用"->"表示,无向图中边使用"--"表示,他们不可以混合使用。graphviz官方网站:http://graphviz.org/

         graphviz很容易安装,在windows上可以下载msi文件,然后一路安装,在mac上可以通过brew install graphviz安装,安装完成可以使用dot -v查看是否安装成功。

$ dot -v

我们来看一个最简单的例子,编辑hello.gv文件

$ vi hello.gv

graph progress1{ a -- b a -- b b -- a[color=blue]}
完成之后我们通过命令执行将它转换为图形。

$dot -Tpng hello.gv -o hello.png

生成的图形如下:

在hello.gv中我们定义了两个结点(node),a和b,他们之间有三条线,均是无向的,因此也称为无向图graph,同时第三条边我们还通过[]来设置了color属性。

我们对hello.gv稍作修改,将其改为有向图

digraph progress2{ a -> b a -> b b -> a[color=blue,style=filled]}
生成图形结果如下图所示:

      以上对边使用了"->",表示有向图,定义图时使用的是digraph,与无向图还是有区别的。

      以上两个图形都是相对简单的,而且属性也大多使用的是默认值,现在我们稍微介绍一些基础知识,他们对我们画图会有很大的帮助。

      1、我们知道图由点和线组成,点(node)是有形状(shape)的,点的形状有box,circle,polygon,plaintext,即方形、圆形、多边形、文本。默认是ellipse,即椭圆。

      2、点也可以定义标签label,默认标签即点的名称(name)。

      3、边线(edge)可以有方向,方向分为forward(default),back,both,none。

      4、图还可以包含子图,使用subgraph定义,子图的名称必须使用cluster前缀。

      5、设置属性时,可以使用node[x=y]的方式为点设置属性,也可以使用nodename[x=y]为某一个点设置属性,同理edge[x=y]可以用来为边设置属性。

       下面我们利用刚才的理论基础来画一个复杂的图形,先看代码:

digraph G{subgraph cluster1{        node[style=filled,color=white];        style=filled;        color=lightgrey;        a0 -> a1 -> a2 -> a3;        label="progress #1";}subgraph cluster2{        node[style=filled];        b0 -> b1 -> b2 -> b3;        label="progress #2";        color=blue;}start -> a0;start -> b0;a1 -> b3;b2 -> a3;a0 -> a3[dir=back];a3 -> end;b3 -> end;start[shape=circle,color=red,style=filled];end[shape=circle,color=green,style=filled];}
上面代码定义了一个图中包含了两个字图,他们分别代表progress #1和progress #2,每个图中会有一个按顺序排列的有向图,这个图中还有结点是互相指向的,另外利用a0->a3[dir=back]实现了a3到a0的指向。利用这段代码生成的图形如下所示:


总结一下利用graphviz画图的感受,画出的图形很直观,很容易理解,就是设置属性稍微复杂一些,如果对属性非常清楚,那么就可以画出你想画的任何图形。

0 0
原创粉丝点击