01.Graphviz简介

Graphviz 是贝尔实验室开发的一个高效而简洁的开源图形可视化软件。Graphviz设计的初衷是简化有向图和无向图的布局,使用特定的领域特定语言:dot定义图形,布局引擎来解析图形定义并完成自动布局,渲染和输出。Graphviz可以将图形导出为图片,SVG,PDF,完整的支持列表详见: Output Formats

安装

下载地址

http://graphviz.org/download/

windows

  • 下载安装包
  • 安装到任意位置
  • bin目录增加到PATH环境变量
  • 启动一个命令行,执行dot --help验证安装是否成功

Debian

$ sudo apt-get update 
$ sudo apt-get install graphviz graphviz-doc

示例

$ mkdir -p graphviz/Testing
$ cd graphviz/Testing/
$ touch Testing.dot

使用文本编辑器编辑Testing.dot,添加如下内容

digraph G {
    main -> parse -> execute;
    main -> init;
    main -> cleanup;
    execute -> make_string;
    execute -> printf;
    init -> make_string;
    main -> printf;
    execute -> compare;
	google [label="谷歌搜索" fontname="Noto Sans CJK SC Regular:style=Regula"]; 
	google -> execute;
}

生成图片

$ dot -T svg Testing.dot -o Testing.svg

生成图片如下:

Testing.svg

注意: Graphviz默认设置下是不支持中文 图形label为非英文字符时,需要指定渲染使用的字体(Noto Sans CJK SC Regular:style=Regula),防止生成的图片乱码。
在Linux下,可以使用fc-list查看可用的字体。
Windows环境下,可以使用支持中文的字体。

windows系统中文字体

字体引用名
新細明體PMingLiU
細明體MingLiU
標楷體DFKai-SB
黑体SimHei
宋体SimSun
新宋体NSimSun
仿宋FangSong
楷体KaiTi
仿宋_GB2312FangSong_GB2312
楷体_GB2312KaiTi_GB2312
微軟正黑體Microsoft JhengHei
微软雅黑体Microsoft YaHei

Visual Studio Code插件

Visual Studio Code编辑器有一款可用实时预览Graphviz的插件: Graphviz Preview ,可以实时预览Graphviz图形的渲染后效果。

Graphviz Preview

Graphviz的布局器

Graphviz中包含了众多的布局器,常用的有以下几个

  • dot - 默认布局方式,主要用于有向图
  • neato - spring model布局,适用于不是太大图形(小于100个节点),Neato尝试全局能量最小化函数,等效于多维度统计缩放(图形学算法相关概念,不是很懂,原文是Neato attempts to minimize a global energy function, which is equivalent to statistical multi-dimensional scaling.)。
  • fdp - 类似于neato的spring model布局,不同的是他使用减小力量(reducing forces),而不是能量(working with energy)
  • sfdp - 多尺寸的fdp,用于大型图布局
  • twopi - 径向布局,节点放置在同心圆上,位置取决于节点与指定根节点的距离。
  • circo - 环形布局,适用于某些特定的多重循环结构图,例如电信网络等。