程序员的绘图利器 — Graphviz
概述
Graphviz (Graph Visualization Software) 是一个由AT&T实验室启动的开源工具包。DOT是一种图形描述语言,非常简单的,
Graphviz就是用来处理这种语言的工具。只需要简单了解一下DOT语言,就可以用Graphviz绘图了,它对程序员特别有用。
So in short, if you are a programmer, it is born for you。
无向图
graph graphname {a -- b -- c;b -- d;}

有向图
digraph graphname {a -> b -> c;b -> d;}

属性
//DOT语言中,可以对节点和边添加不同的属性。digraph graphname {//节点的属性,节点的名称a [lable = 'Foo'];//节点的属性,节点的形状b [shape = box];//边的属性,边的颜色a -> b -> c [color = blue];//边的属性,边的线状b -> d [style = dotted];}
基本图形
digraph G {//把图片的尺寸设为4inch * 4inchsize = '4,4';main [shape = box];//边的重要程度,默认是1main->parse [weight = 8];parse->execute;//点状线main->init[style = dotted];main->cleanup;//连接了两条线execute->{make_string;printf}init->make_string;//把边的默认颜色设为rededge [color = red];main->printf [sytle=bold, label = '100times'];//节点的名称make_string [label = 'make a\nstring'];//设置节点的默认属性node [shape=box,style =filled,color=lightgrey];execute->compare;}

多边形
digraph G{a -> b -> c;b -> d;/* 形状为多边形,边数为5,外框为3条,颜色为淡蓝,样式为填充 */a [shape = polygon, sides = 5, peripheries = 3, color = lightblue, style = filled];/* 形状为多边形,边数为4,角的倾斜度为0.4,内容为hellow world*/c [shape = polygon, sides = 4, skew = 0.4, label = 'hello world'];/* 形状为倒三角,整体旋转30度 */d [shape = invtriangle,orientation = 30];/* 形状为多边形,边数为4,扭曲度为0.7 */e [shape = polygon, sides = 4, distortion = 0.7];}

数据结构
(1)复杂的标签
digraph structs {/* 把节点的默认形状设为矩形record,默认的是圆角矩形Mrecord */node [shape = record];struct1 [label = 'left|middle|right'];struct2 [label = 'one|two'];struct3 [label = 'hello\nworld|{b|{c|d|e}|f}|g|h'];struct1 -> struct2;struct1 -> struct3;}

graph picture {//这幅图的名字label = 'I love you';//图名字的位置在bottom,也可以是tlabelloc = b;//图名字的位置在left,也可以是rlabeljust = l;edge[decorate = true];C -- D [label = 's1'];C -- E [label = 's2'];C -- F [label = 's3'];D -- E [label = 's4'];D -- F [label = 's5'];edge[decorate = false, labelfontcolor = blue, fontcolor = red];C1 -- D1 [headlabel = 'c1',taillabel = 'd1',label = 'c1 - d1'];}

(2)行列对齐
digraph html {rankdir = LR;{node[shape = plaintext];1995 -> 1996 -> 1997 -> 1998 -> 1999 -> 2000 -> 2001;}{node[shape = box, style = filled];WAR3 -> Xhero -> Footman -> DOTA:WAR3 -> Battleship;}{rank = same; 1996; WAR3;}{rank = same; 1998; Xhero; Battleship;}{rank = same; 1999; Footman;}{rank = same; 2001; DOTA;}}

(3)二叉树
digraph G {label = 'Binary search tree';node [shape = record];A [label = '<f0>|<f1>A|<f2>'];B [label = '<f0>|<f1>B|<f2>'];C [label = '<f0>|<f1>C|<f2>'];D [label = '<f0>|<f1>D|<f2>'];E [label = '<f0>|<f1>E|<f2>'];F [label = '<f0>|<f1>F|<f2>'];G [label = '<f0>|<f1>G|<f2>'];A:f0 -> B:f1;A:f2 -> C:f1;B:f0 -> D:f1;B:f2 -> E:f1;C:f0 -> F:f1;C:f2 -> G:f1;}

(4)哈希表
digraph G{nodesep = .05;rankdir = LR;node [shape = record,width = .1,height = .1];node0 [label = '<f0>|<f1>|<f2>|<f3>|<f4>|<f5>|<f6>|',height = 2.5];node [width = 1.5];node1 [label = '{<n>n14|719|<p>}'];node2 [label = '{<n>a1|805|<p>}'];node3 [label = '{<n>i9|718|<p>}'];node4 [label = '{<n>e5|989|<p>}'];node5 [label = '{<n>t20|959|<p>}'];node6 [label = '{<n>o15|794|<p>}'];node7 [label = '{<n>s19|659|<p>}'];node0:f0 -> node1:n;node0:f1 -> node2:n;node0:f2 -> node3:n;node0:f5 -> node4:n;node0:f6 -> node5:n;node2:p -> node6:n;node4:p -> node7:n;}

流程图
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];}

Reference
[1] http://zh.wikipedia.org/zh-cn/DOT语言,DOT语言简明介绍。
[2] http://zh.wikipedia.org/zh/Graphviz,简单背景知识。
[3] Graphviz中文指南。
赞 (0)

