第一章 快速入门

1.1 画一个简单的有向图

Graphviz 编译的源文件是 dot 文件,把如下的代码保存到 graph01.dot 文件。

graph01.dot
1
2
3
4
5
6
7
8
digraph G {
    main -> parse -> execute;
    main -> init;
    main -> cleanup;
    execute -> make_string;
    execute -> printf;
    execute -> compare;
}

使用命令 dot -Tjpg graph01.dot -o graph01.jpg 编译,可以得到名为 graph01.jpg 的图片,图片内容如下所示。

_images/graph01.jpg

在上述的 dot 文件中,定义了一个名为 G 的有向图( digraph 是有向图的意思),有向图的具体内容紧随定义后的花括号内。花括号体内,定义了点( node )到点的线段( edge )。每一行,以英文分号(;)结尾的整行,定义的是一条连接两个或多个点的有向线段,比如 main -> parse -> execute 定义了一条历经三个点(main, parse, execute)的有向线段。 -> 定义了线段的方向。

1.2 让有向图更复杂点

Graphviz 可以给点(node)或者线(edge)添加格式。

graph02.dot
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
digraph G {
    main [shape=box];
    main -> parse [weight=8];
    parse-> execute;
    main -> init [style=dotted];
    main -> cleanup;
    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=box, style=filled,color=".7, .3, 1.0"];
    execute -> compare;
}

使用命令 dot -Tjpg graph02.dot -o graph02.jpg 可以得到如下的图片:

_images/graph02.jpg

1.3 支持中文

Graphviz 支持 UTF8 下的中文。

graph03.dot
1
2
3
4
5
6
digraph G {
    魔兽争霸3 -> XHero;
    魔兽争霸3 -> 超级战舰;
    XHero -> Footman;
    Footman -> 刀塔;
}

使用命令 dot -Tjpg graph03.dot -o graph03.jpg 可以得到如下的图片:

_images/graph03.jpg

1.4 指定有向图箭头方向

对每条边设置 dir 参数,可以设置每条线的方向。

graph04.dot
1
2
3
4
5
6
digraph html {
    A -> B [dir = both];
    B -> C [dir = none];
    C -> D [dir = back];
    D -> A [dir = forward];
}

编译可以得到如下的图片:

_images/graph04.jpg

1.5 控制边的起点位置和终点位置

graph07.dot
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
digraph G {
    node [shape=box];
    c1:n -> d1 [label=n];
    c2:ne -> d2:ne [label=ne];
    c3:e -> d3:ne [label=e];
    c4:se -> d4:n [label=se];
    c5:s -> d5:n [label=s];
    c6:sw -> d6:n [label=sw];
    c7:w -> d7:nw [label=w];
    c8:nw -> d8:nw[label=nw];
}

编译可以得到如下的图片:

_images/graph07.jpg

1.6 内置颜色

这里列出了基本的颜色,更多信息请参看 Graphviz ColorsGraphviz Attrs