Graphviz And Dot - 一图胜千言

AI 摘要: Graphviz是一款自由软件,可以通过DOT语言描述图形结构,并通过命令行工具将其转换为多种格式的图片,如svg、png、jpg等。Graphviz具有有向图和无向图、排列方向、子图、边和节点等属性,并提供了在线调试和命令执行两种方式生成图像。可以通过在线生成工具或者下载Graphviz安装包来使用。

1. 背景

如果学过某种形式的计算机科学或软件工程,你会遇到类图、流程图,在白板上面也经常画一些商业方面的业务流程图。

在计算机科学的背景下,图是一种数据结构,图形具有由“边”连接的“节点”的集合,同时图也支持有向图和无向图,边支持带权重属性。

一图胜千言,有时候,只是简单描述一下高层次的想法就可以对一些事情的理解产生重大影响(比如软件设计之前的架构图、业务流程图、数据结构、算法设计等)。

2. Graphviz介绍

Graphviz是一个自由软件(英文:Graph Visualization Software的缩写),由AT&T实验室启动的开源工具包,用于绘制DOT语言脚本描述的图形,它也提供了供其它软件使用的库。

Graphviz由一种被称为DOT语言的图形描述语言1 与一组可以生成和/或处理DOT文件的工具组成,DOT语言文件通常以.dot或者.gv作为后缀来标明,比如test.do或test.gv:

这块我们可以基于在线生成或者下载graphviz安装包执行生成对应格式的图片

2.1. dot语言

    • 有向图|无向图
    • 排列方向
    • 子图
    • cluster
    • 属性描述:比如颜色、边描述等
  • 节点(属性描述)
    • 属性描述:颜色、形状等

2.2. dot语言处理工具

  • dot:将生成的图形转换成多种输出格式的命令行工具(支持svg、png、jpg、gif等格式),dot -Tsvg test.gv > test.svg,这个工具是最常使用的
  • neato:用于sprint model的生成(在Mac OS版本中称为energy minimized)。
  • twopi:用于放射状图形的生成
  • circo :用于圆形图形的生成。
  • fdp :另一个用于生成无向图的工具。
  • dotty :一个用于可视化与修改图形的图形用户界面程序。
  • lefty :它可以显示DOT图形,并允许用户用鼠标在图上执行操作。

3. Graphviz 图像生成

3.1. 在线调试

在线参考:http://viz-js.com/

3.2. 命令执行

1
2
3
4
// -T指定输出格式,支持png、jpg、svg等
dot -Tpng -ohello.png hello.dot
或者
dot -Tsvg hello.dot > hello.svg

4. Graphviz 示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
digraph cluster {
    subgraph cluster_0 {
        label = "Process A";
        node[style="filled", color="lightgray"];
        a0 -> a1 -> a2 -> a3;
    }
    subgraph cluster_1 {
        label = "Process B";
        b0 -> b1 -> b2;
    }
    b1 -> a3;
    start -> a0;
    start -> b0;
    a3 -> end;
    b2 -> end;
    start [shape = Mdiamond]
    end [shape = Msquare]
}

输出结果:

5. 参考