Dot语言

Dot语言

导出

PostScript

$ dot -Tps graph1.gv -o graph1.ps

PNG

$ dot -Tpng -o test.png test.dot

节点

DOT中,节点可以不用声明直接使用。每个节点首次出现的名称做为该节点的唯一标识。
属性设置:对节点可以设置的常见通用属性有shape label style color(边) fillcolor rank等,对于不同的形状,可能还有不同的属性可以设置,如对于多边形可以设置边数等。
节点属性设置时,node用于设置默认属性(对设置位置之后的点有效),在点后面用[]设置单独一个点的属性。

graph node_settings {
    node [shape = "box", style = "filled", color = "black", fillcolor = "green"]
    //设置节点的默认形状,类型,颜色,填充颜色
    a [shape = "ellipse", color = "red", label = "this is a"]
    //设置节点a的颜色,注意默认节点类型是filled,所以这里的color只是设置a的边框颜色
    b [label = "two\nlines"]   //label支持'\n'换行
    a -- b
    a -- c     //如果不需要设置c的属性,可以不用声明c而直接使用
    node [shape = "circle"]
    d [label = "cicle"]
    c -- d      //d使用之前最后出现的node设置,形状为circle
    {rank = same a, d}     //设置a和d在同一层
}

边有有向边和无向边两种,无向边用于无向图,有向边用于有向图,不可混用。
属性设置:边的常见设置有style color weight label labelfontcolor headlabel taillabel decorate等.
对于有向边,还可以设置边的起点位置等(用n e s w和相邻字母的组合表示位置)。和节点类似的,边属性设置时,用edge[]设置默认属性,在边之后用[]设置单独一条边的属性。

digraph edge_settings {
    edge [color = "green", decorate = false]
    //设置边的默认属性
    node [shape = "polygon", sides = 4, color = "blue"]
    a -> b [style = "dotted", color = "red", label = "a to b"]
    //设置style color label
    b: se -> c: w [headlabel = "end",  taillabel = "start"]
    //设置边从b的"东南方"出发,从c的"西方"结束,设置有向边起点和重点的label
    edge [style = "bond", decorate = true]
    //设置之后的边加粗并且标签和连线之间有线标注
    {c, f} -> {d, e} [label = "multi-lines"]
    //可以用这种方式同时画多条边
}

从前面的例子中已经可以看出,DOT语言可以描述无向图和有向图两种图,graph标识无向图,digraph标识有向图。
属性设置:在一个图的开头写入属性即可设置图形的属性,常用的图形属性有sizelabellabelloclabeljustbgcolorrankdir等。
子图,可以进行和“父图”类似的设置,唯一注意的是子图必须以cluster做为名称的开始。
下面是实现的官网首页上的图:

digraph graph_settings {
    start [shape = "Mdiamond"]
    end [shape = "Msquare"]

    subgraph cluster_sub1 {
        label = "process #1"
        lableloc = "t"
        bgcolor = "gray55"
        node [style = "filled", color = "white"]
        a0 -> a1 -> a2 -> a3 -> a0
    }
    subgraph cluster_sub2 {
        label = "process #2"
        lableloc = "t"
        color = "blue"
        node [style = "filled", color = "black", fillcolor = "gray55"]
        b0 -> b1 -> b2 -> b3
    }

    start -> {a0, b0}
    a1 -> b3
    b2 -> a3
    {a3, b3} -> end
}

Node Shapes

by default, with shape=ellipse, width=.75, height=.5 and labeled by the node name.
Other common shapes include box, circle, record and plaintext.