Graphviz是一个强大的绘图工具,使用DOT语言描述图像。
Graphviz是什么
Graphviz是基于dot语言的绘图工具,可以画有向图、无向图、关系图、目录图、流程图等各种你知道的或不知道的图形。可以欣赏Graphviz的Gallery,以及Yifan Hu的gallery of large graphs。
Graphviz使用DOT语言描述图形,并提供一组工具:
dot
将生成的图形转换成多种输出格式,如PostScript,PDF,SVG,PNG,含注解的文本等等。
neato
用于sprint model的生成(在Mac OS版本中称为energy minimized)。
twopi
用于放射状图形的生成
circo
用于圆形图形的生成。
fdp
另一个用于生成无向图的工具。
dotty
一个用于可视化与修改图形的图形用户界面程序。
lefty
一个可编程的控件,它可以显示DOT图形,并允许用户用鼠标在图上执行操作。Lefty可以作为MVC模型的使用图形的GUI程序中的视图部分。
Graphviz使用DOT语言描述图形,而不是依赖于鼠标绘图,这就提供了无限的可能,主要体现在两个方面:
- 自动生成图形描述文件,从而自动生成图形
- 更加Geek的写作方式,比如在Org-mode中嵌入图形代码,在导出时自动生成图形文件
有一些强大的工具依赖或支持Graphviz,比如OmniGraffle
和PlantUML。
DOT语言简介
DOT语言使用离散数学中的Graph描述图形,包括三个基本元素:grahp,node,edge。下面是一个例子:
example.dot
1 | digraph G { |
执行命令dot -Tpng example.dot -o example.png
,就可以生成如下的图形:
DOT通过属性可以设置node和edge的样式,比如:
1 | graph graphname { |
生成的图形如下:
更多的属性设置可以参考官方文档。
应用场景
Graphviz可以有很多玩法,常见的比如:
- 直接使用Graphviz绘图,以代替Visio等绘图工具
- 其他工具生成数据,Graphviz进行图表展示
- 利用脚本动态生成图
- 嵌入轻量级标记语言,如org-mode和markdown中