Graphviz工具使用(1)

你是程序员? 你画流程图或者关系图还在用Viso,Dia,LibreOffice Draw ? 何不试试Graphviz呢。
不过在学习Graphviz之前,我们应该先了解DOT语言(又是语言,你妹妹啊)。

先上DOT代码:

graph example1 {
    A -- B;
}

得到图:

example

继续代码:

digraph example2 {
    A -> B;
}

example2

分析上面两个图片,可以看出一个是有向图,一个是无向图,程序员看到DOT代码格式,肯定比较眼熟,和我们的函数定义类似,用

" -- "

来表示无向连接,

" -> "

表示有向连接。

再看看下面代码:

digraph example3 {
    A -> B;
    B -> C;
    B -> D;
    D -> E;
}

得到图3:
example3

到这里就有点感觉了,我们尝试改变一下,上面我们得到的图中,节点都是椭圆,我们能不能设置成长方形或者正方形呢?我们能不能填充节点的颜色呢?
答案是肯定的。

继续代码:


digraph G {

/*图片缩放比例,如果图片生成的图片较大可以设置范围*/
size ="4,4";
/*全局字体*/
fontname = "Microsoft Yi Baiti";
fontsize=14;/*全局字体大小*/
node[shape=box];/*全局节点现状(长方形)*/

/* main节点现状为椭圆,这里相当于重写了全局现状定义 */
main [shape=ellipse]; 

/*这里的weight是定义边的属性,类似css中的weight*/
main -> parse [weight=8]; 

parse -> execute;
main -> init [style=dotted]; /*定义边的样式为虚线*/
main -> cleanup;

/*
这里定义了一个组合,可以分解为:
execute -> make_string;
execute -> printf
*/
execute -> { make_string; printf};

init -> make_string;
edge [color=red]; /*定义边的颜色,只影响后面所有边,前面边不受影响*/
main -> printf [style=bold,label="100 times"];
make_string [label="make a\nstring"];/*设置节点标签*/
node [shape=circle,style=filled,color=".7 .3 1.0"];
execute -> compare;

}

得到图片:
c

关于节点,边,以及其他属性的设置可以看官方文档所有支持节点形状,所有支持颜色

到这里其实很容易看到DOT语言相对比较简单,回到Graphviz上来,Graphviz其实是一个DOT语言的解析工具,同时实现了将DOT最后输出成指定格式的文件。
Windows以及linux下都有对应的版本。

可以看到对于程序员来说,使用DOT语言来绘图的优点有:
1. 可以将思路程序化,然后通过版本控制软件与代码同步演化。
2. 保存一致的输出,特别是多人协作的时候。

Posted in Uncategorized | Comments Off on Graphviz工具使用(1)