UP | HOME

Graphviz

Table of Contents

Graphviz

简介

Graphviz (英文: Graph Visualization Software 的缩写)是一个由AT&T实验室启动的开源工具包,可以用于绘制DOT语言脚本描述的图形。它也提供了供其它软件使用的库。Graphviz是一个自由软件,其授权为 Eclipse Public License 。其Mac版本曾经获得2004年的苹果设计奖。

Graphviz 由一种被称为 DOT 语言的图形描述语言与一组可以生成和/或处理 DOT 文件的工具组

命令 说明
dot 一个用来将生成的图形转换成多种输出格式的命令行工具。其输出格式包括 PostScript,PDF,SVG,PNG, 含注解的文本等等。
neato 用于 sprint model 的生成( 在Mac OS版本中称为 energy minimized )。
twopi 用于放射状图形的生成
circo 用于圆形图形的生成。
fdp 另一个用于生成无向图的工具。
dotty 一个用于可视化与修改图形的图形用户界面程序。
lefty 一个可编程的(使用一种被 EZ 影响的语言)控件,它可以显示 DOT 图形,并允许用户用鼠标在图上执行操作。 Lefty 可以作为 MVC 模型的使用图形的 GUI 程序中的视图部分。

DOT 语言

DOT 语言是一种文本图形描述语言它提供了一种简单的描述图形的方法,并且可以为人类和计算机程序所理解。 DOT 语言文件通常是具有 .gv 或是 .dot 的文件扩展名。很多程序都可以处理 DOT 文件。

简单例子

第一步

创建文本文件并命令为 demo.dot ,输入以下内容:

graph demo {
    "Browser" -- {"Chrome", "Fiefox", "Safari", "..."}
}

第二步

dot demo.dot -T png -o demo.png

-------------------------------
  dot

  Render an image of a `linear directed` network graph from a `graphviz` file.
  Layouts: `dot`, `neato`, `twopi`, `circo`, `fdp`, `sfdp`, `osage` & `patchwork`.
  More information: https://graphviz.org/doc/info/command.html.

  - Render a `png` image with a filename based on the input filename and output format (uppercase -O):
    dot -T png -O path/to/input.gv

  - Render a `svg` image with the specified output filename (lowercase -o):
    dot -T svg -o path/to/image.svg path/to/input.gv

  - Render the output in `ps`, `pdf`, `svg`, `fig`, `png`, `gif`, `jpg`, `json`, or `dot` format:
    dot -T format -O path/to/input.gv

  - Render a `gif` image using stdin and stdout:
    echo "digraph {this -> that} " | dot -T gif > path/to/image.gif

  - Display help:
    dot -?

效果

/static/img/example/dot_example_1.png

DOT 使用

基本用法

dot 可以生成 GIF, PNG, SVG, PDFPostScript 格式的图片。 dot 语言画图的类别可 以分成以下两类:

  • digraph 有向图,关系使用 -> 来描述
  • graph 无向图,关系使用 -- 来描述

每种图中包含以下常见要素:

  • node 节点
  • edge
  • subgraph 子图
  • attr 属性
  • dot 语言中每个变量表示一个节点
  • -> 表示连接边,有向 (->) 和无向 (--)

图的属性

  • size 设置图片大小为 =4,4=(英尺)
  • 节点和边的属性写在方括号里 [ ]
  • shape=box 设置节点形状为方框
  • 花括号表示一个节点连接多个节点 execute -> { make_string; printf} 等同于 execute -> make_string; execute -> printf;
  • 节点和边的文字可以使用 label 属性来设置
  • 注释和 C 语言类似,// 和 # 注释单行, /* */多行注释

常用属性

常用图属性

属性名 默认值 说明
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类似

参考

Author: josephzeng

Lastmod: <2022-05-14 Sat>

License: CC BY-NC-ND 4.0

First created: 2022-05-14 Sat 00:00
Last updated: 2022-05-15 Sun 12:29
Power by Emacs 27.1 (Org mode 9.4)
© 2017 – 2021 by josephzeng