graphviz是一个由AT&T开源的c语言包,使用dot语言(一种DSL语言)来可视化程序的结构、流程、关系等。
graphviz有2部分构成:
- Dot语言文件
- 一组可以生成和/或处理DOT文件的工具
命令
| 命令 | 说明 | | —- | —- | | dot | 一个用来将生成的图形转换成多种输出格式的命令行工具。其输出格式包括PostScript,PDF,SVG,PNG,含注解的文本等等。 | | neato | 用于sprint model的生成(在Mac OS版本中称为energy minimized)。 | | twopi | 用于放射状图形的生成 | | circo | 用于圆形图形的生成。 | | fdp | 另一个用于生成无向图的工具。 | | dotty | 一个用于可视化与修改图形的图形用户界面程序。 | | lefty | 一个可编程的(使用一种被EZ影响的语言[4])控件,它可以显示DOT图形,并允许用户用鼠标在图上执行操作。Lefty可以作为MVC模型的使用图形的GUI程序中的视图部分。 |
dot语言
DOT语言是一种文本图形描述语言它提供了一种简单的描述图形的方法,并且可以为人类和计算机程序所理解。DOT语言文件通常是具有
.gv
或是.dot
的文件扩展名。很多程序都可以处理DOT文件。
注释
节点定义
无属性节点(按默认属性来渲染)
有属性节点:
追加定义属性节点
划分作用域定义属性节点
节点之间关系定义
通过 --
->
来定义节点之间的关系,也称为“边”, 通过 [ ]
定义边的属性
一一关联
批量关联
常用属性
全局属性
属性名 | 默认值 | 说明 |
---|---|---|
label | 图片标签,如上面示例 |
|
bgcolor | 背景颜色,颜色文档点此 | |
fontcolor | black | 字体颜色,定义上面示例 的颜色 |
fontname | Times-Roman | 字体 |
fontsize | 14 | 字体大小 |
rank | 子图等级限制, same,min,max,source,sink | |
rankdir | TB | 排序方向,LR(left to right) or TB(top to bottom) |
compound | false | If true, allow edges between clusters. 配合 lhead 和 ltail 使用 |
节点属性
属性名 | 默认值 | 说明 |
---|---|---|
label | node name | 节点显示内容 |
color | black | node边框颜色 |
fontcolor | black | 字体颜色 |
fillcolor | 背景色 | |
fontname | Times-Roman | 字体 |
fontsize | 14 | 字体大小 |
shape | ellipse | 形状,box、ellipse、circle、diamond、plaintext、point、triangle、invtriangle |
style | 图形样式,eg. bold、dashed、dotted、filled | |
image | 背景图片地址 |
边属性
属性名 | 默认值 | 说明 |
---|---|---|
label | 描述关系 | |
color | black | 箭头颜色 |
fontcolor | black | 关系文字颜色 |
dir | forward | 设置方向:forward,back,both,none |
arrowhead | normal | 箭头头部形状。box、crow、diamond、dot、none、normal、vee。箭头文档点此 |
arrowtail | 箭头尾部形状 | |
arrowsize | 1.0 | 箭头大小 |
style | 图形样式,eg. bold、dashed、dotted、filled | |
lhead | 当 compound 为true时,lhead用于指定边指向的cluster | |
ltail | 与ltail类似 |
示例
子图
一个图可以包含多个子图,以及子图也可以嵌套子图。子图的名字须为cluster*
,否则就直接当节点渲染了。
二叉树
用 | 隔开的串会在绘制出来的节点中展现为一条分隔符,用 <> 括起来的串称为锚点。
记录形式的节点也可以是竖形排列的。与横向排列的记录的不同只是label的形式不同,label中内容使用 {} 包围则是竖形排列的。
直接指向子图
边直接指向cluster,需要设置 compound 为true,并配合 lhead 或 ltail 来实现。