一、简介DOT & graphviz
1. DOT

    DOT是一种文本图形描述语言。DOT语言文件通常具有.gv或是.dot的文件扩展名。当然,在编写好.dot或者.gv的文件之后,需要有专门的程序处理这些文件并将其渲染成为图片,dot就是其中一款程序,它可以将DOT语言描述的图形渲染成.png、.jpg、.pdf等多种类型。
    当然,作为工具,dot本身是很原始的,就像gcc之于c代码,g++之于cpp代码一样,或许某些程序员会热衷于在终端使用这些工具,但也有很多人喜欢交互式的界面,所以就有了gvedit之类的工具,它提供交互式的窗口来使用dot等工具渲染DOT语言描述的图形。
2. graphviz
    graphviz是一个开源软件包,上述dot和gvedit等工具都在该软件包中。
    所以,不妨简单的认为DOT是一门图形描述语言而graphviz是处理该语言文件的一个集成化的工具。

二、使用DOT & graphviz
1. 环境配置(ubuntu)

sudo apt-get install graphviz

2. 应用实例

创建test.dot文件内容如下:

digraph g {
node [shape=plaintext]
A1 -> B1
A2 -> B2
A1 -> A2
B1 -> B2
}

在终端直接调用dot命令处理文本并生成图片。以把test.dot导出为test.png为例,命令为:dot -Tpng -o test.png test.dot

三、DOT语法
    现在已经可以愉快的使用DOT & graphviz绘图了,唯一需要的就是更好的了解DOT语法,以绘出我们期望的效果。
    DOT语法相对简单和松散,没有特别的格式要求,也没有复杂的运算符和结构。
1. 基本语法
    graph(无向图)或者digraph(无向图)表示图,然后{}中的内容是对图的描述,注释风格和C类似(“//”用于单行注释,/**/用于多行注释)。如一个无向图:

[plain] view plain copy

 

  1. graph graph1 {      //无向图graph1
  2. a -- b          //节点a和b之间连线
  3. }

2. 节点
    DOT中,节点可以不用声明直接使用。每个节点首次出现的名称做为该节点的唯一标识。
    属性设置:对节点可以设置的常见通用属性有shape、label、style、color、fillcolor、rank等,对于不同的形状,可能还有不同的属性可以设置,如对于多边形可以设置边数等。节点属性设置时,node用于设置默认属性(对设置位置之后的点有效),在点后面用[]设置单独一个点的属性。

[plain] view plain copy

 

  1. graph node_settings {
  2. node [shape = "box", style = "filled", color = "black", fillcolor = "green"]   //设置节点的默认形状,类型,颜色,填充颜色
  3. a [shape = "ellipse", color = "red", label = "this is a"]     //设置节点a的颜色,注意默认节点类型是filled,所以这里的color只是设置a的边框颜色
  4. b [label = "two\nlines"]   //label支持'\n'换行
  5. a -- b
  6. a -- c     //如果不需要设置c的属性,可以不用声明c而直接使用
  7. node [shape = "circle"]
  8. d [label = "cicle"]
  9. c -- d      //d使用之前最后出现的node设置,形状为circle
  10. {rank = same a, d}     //设置a和d在同一层
  11. }

3. 边
    边有有向边和无向边两种,无向边用于无向图,有向边用于有向图,不可混用。
    属性设置:边的常见设置有style、color、weight、label、labelfontcolor、headlabel、taillabel、decorate等,对于有向边,还可以设置边的起点位置等(用n、e、s、w和相邻字母的组合表示位置)。和节点类似的,边属性设置时,用edge[]设置默认属性,在边之后用[]设置单独一条边的属性。

[plain] view plain copy

 

  1. digraph edge_settings {
  2. edge [color = "green", decorate = false]        //设置边的默认属性
  3. node [shape = "polygon", sides = 4, color = "blue"]
  4. a -> b [style = "dotted", color = "red", label = "a to b"]  //设置style、color、label
  5. b: se -> c: w [headlabel = "end",  taillabel = "start"]     //设置边从b的“东南方”出发,从c的“西方”结束,设置有向边起点和重点的label
  6. edge [style = "bond", decorate = true]      //设置之后的边加粗并且标签和连线之间有线标注
  7. {c, f} -> {d, e} [label = "multi-lines"]    //可以用这种方式同时画多条边
  8. }

4. 图
    从前面的例子中已经可以看出,DOT语言可以描述无向图和有向图两种图,graph标识无向图,digraph标识有向图。
    属性设置:在一个图的开头写入属性即可设置图形的属性,常用的图形属性有size、label、labelloc、labeljust、bgcolor、rankdir等。
    子图,可以进行和“父图”类似的设置,唯一注意的是子图必须以"cluster"做为名称的开始。
    下面是实现的官网首页上的图:

[plain] view plain copy

 

  1. digraph graph_settings {
  2. start [shape = "Mdiamond"]
  3. end [shape = "Msquare"]
  4. subgraph cluster_sub1 {
  5. label = "process #1"
  6. labelloc = "t"
  7. bgcolor = "gray55"
  8. node [style = "filled", color = "white"]
  9. a0 -> a1 -> a2 -> a3 -> a0
  10. }
  11. subgraph cluster_sub2 {
  12. label = "process #2"
  13. labelloc = "t"
  14. color = "blue"
  15. node [style = "filled", color = "black", fillcolor = "gray55"]
  16. b0 -> b1 -> b2 -> b3
  17. }
  18. start -> {a0, b0}
  19. a1 -> b3
  20. b2 -> a3
  21. {a3, b3} -> end
  22. }

本文参考:http://blog.csdn.net/stormdpzh/article/details/14648827

三、DOT语法
    现在已经可以愉快的使用DOT & graphviz绘图了,唯一需要的就是更好的了解DOT语法,以绘出我们期望的效果。
    DOT语法相对简单和松散,没有特别的格式要求,也没有复杂的运算符和结构。
1. 基本语法
    graph(无向图)或者digraph(无向图)表示图,然后{}中的内容是对图的描述,注释风格和C类似(“//”用于单行注释,/**/用于多行注释)。如一个无向图:

[plain] view plain copy

 

  1. graph graph1 {      //无向图graph1
  2. a -- b          //节点a和b之间连线
  3. }

2. 节点
    DOT中,节点可以不用声明直接使用。每个节点首次出现的名称做为该节点的唯一标识。
    属性设置:对节点可以设置的常见通用属性有shape、label、style、color、fillcolor、rank等,对于不同的形状,可能还有不同的属性可以设置,如对于多边形可以设置边数等。节点属性设置时,node用于设置默认属性(对设置位置之后的点有效),在点后面用[]设置单独一个点的属性。

[plain] view plain copy

 

  1. graph node_settings {
  2. node [shape = "box", style = "filled", color = "black", fillcolor = "green"]   //设置节点的默认形状,类型,颜色,填充颜色
  3. a [shape = "ellipse", color = "red", label = "this is a"]     //设置节点a的颜色,注意默认节点类型是filled,所以这里的color只是设置a的边框颜色
  4. b [label = "two\nlines"]   //label支持'\n'换行
  5. a -- b
  6. a -- c     //如果不需要设置c的属性,可以不用声明c而直接使用
  7. node [shape = "circle"]
  8. d [label = "cicle"]
  9. c -- d      //d使用之前最后出现的node设置,形状为circle
  10. {rank = same a, d}     //设置a和d在同一层
  11. }

3. 边
    边有有向边和无向边两种,无向边用于无向图,有向边用于有向图,不可混用。
    属性设置:边的常见设置有style、color、weight、label、labelfontcolor、headlabel、taillabel、decorate等,对于有向边,还可以设置边的起点位置等(用n、e、s、w和相邻字母的组合表示位置)。和节点类似的,边属性设置时,用edge[]设置默认属性,在边之后用[]设置单独一条边的属性。

[plain] view plain copy

 

  1. digraph edge_settings {
  2. edge [color = "green", decorate = false]        //设置边的默认属性
  3. node [shape = "polygon", sides = 4, color = "blue"]
  4. a -> b [style = "dotted", color = "red", label = "a to b"]  //设置style、color、label
  5. b: se -> c: w [headlabel = "end",  taillabel = "start"]     //设置边从b的“东南方”出发,从c的“西方”结束,设置有向边起点和重点的label
  6. edge [style = "bond", decorate = true]      //设置之后的边加粗并且标签和连线之间有线标注
  7. {c, f} -> {d, e} [label = "multi-lines"]    //可以用这种方式同时画多条边
  8. }

4. 图
    从前面的例子中已经可以看出,DOT语言可以描述无向图和有向图两种图,graph标识无向图,digraph标识有向图。
    属性设置:在一个图的开头写入属性即可设置图形的属性,常用的图形属性有size、label、labelloc、labeljust、bgcolor、rankdir等。
    子图,可以进行和“父图”类似的设置,唯一注意的是子图必须以"cluster"做为名称的开始。
    下面是实现的官网首页上的图:

[plain] view plain copy

 

  1. digraph graph_settings {
  2. start [shape = "Mdiamond"]
  3. end [shape = "Msquare"]
  4. subgraph cluster_sub1 {
  5. label = "process #1"
  6. labelloc = "t"
  7. bgcolor = "gray55"
  8. node [style = "filled", color = "white"]
  9. a0 -> a1 -> a2 -> a3 -> a0
  10. }
  11. subgraph cluster_sub2 {
  12. label = "process #2"
  13. labelloc = "t"
  14. color = "blue"
  15. node [style = "filled", color = "black", fillcolor = "gray55"]
  16. b0 -> b1 -> b2 -> b3
  17. }
  18. start -> {a0, b0}
  19. a1 -> b3
  20. b2 -> a3
  21. {a3, b3} -> end
  22. }

DOT + graphviz 轻松画图的更多相关文章

  1. doxygen+graphviz轻松绘制函数调用图(call graph)

    前言 之前的工作环境习惯了使用source insight查看函数分析代码,切换到mac下后改用vscode,发现缺少函数调用关系图生成.跨平台的understand可以很好的解决,但是公司没有购买, ...

  2. The DOT Language

    CSDN新首页上线啦,邀请你来立即体验! 立即体验 博客 学院 下载 更多 登录注册 The DOT Language 翻译 2014年04月15日 11:27:07 标签: EBNF / 语言 / ...

  3. 使用DOT语言和Graphviz绘图(翻译)

    Casa Taloyum About Me Blog Archives 使用DOT语言和Graphviz绘图(翻译) Date Wed 26 November 2014 Tags graphviz / ...

  4. Graphviz(转载)

    简述 原文: http://www.tuicool.com/articles/vy2Ajyu 本文翻译自 Drawing Graphs using Dot and Graphviz 1. 许可 Cop ...

  5. Anaconda安装Graphviz, mac下Graphviz安装, pcharm中调用pycharm, Graphviz典型例子

    mac下的Graphviz安装及使用 2017年10月13日 13:30:07 阅读数:7495 一.安装 Graphviz http://www.graphviz.org/ mac用户建议直接用ho ...

  6. GraphViz web版

    http://graphviz-dev.appspot.com/ 用来把dot语言的图画出来,很多地方用dot语言来画图,比如doxygen的类关系,gperftools的分析结果等.

  7. Mac下安装最新版本的Graphviz

    由于版本兼容问题,Mac下Graphviz之前一直装的是低版本的2.36.高版本的安装方法如下: 1.log in & download Xcode an Xcode Command Line ...

  8. c语言分析函数调用关系图(call graph)的几种方法

    一.基于 Doxygen或 lxr 的API形式的文档系统. 二.基于CodeViz, CodeViz是<Understanding The Linux Virtual Memory Manag ...

  9. Longest Palindromic Substring - 一题多解

    题意是寻找一个字符串的最大回文字串,最简单的是n3方的算法,由于字符串最大长度为1000,所以这个方法很危险而且不科学. 紧接着想到的是一个n方的算法:回文子串是从中间向两边产生的,那么对于每个字符考 ...

随机推荐

  1. dwz分页实现分析

    dwz给我们提供了一个很好的列表UI 我对它的分析后将页面分为四个部分 <form id="pagerForm" method="post" action ...

  2. Postgres的用户认证

    我们先来讲讲postgresql的用户认证吧. 我想我们有必要明白以下几个问题: 第一.postgresql的用户和操作系统的用户没有任何直接的的关系.虽然在postgaresql的初始安装中,它会有 ...

  3. DJANTO之FORM

    文档很仔细,但熟悉要慢慢来~~ from django.shortcuts import render from contact.forms import ContactForm from djang ...

  4. 有空可以对C#尝一下鲜,WCF看上去很诱人(跨进程、跨机器、跨子网,跨企业网乃至跨Internet的分布式服务)

    说道底不还是要借助NGNIX实现,PHP自身呢?C#的WCF可以脱离IIS就可以实现跨进程.跨机器.跨子网,跨企业网乃至跨Internet的分布式服务,宿主可以是IIS,WinForm,WPF, Wi ...

  5. WPF用样式实现TextBox的虚拟提示效果

    [版权声明]本文为博主原创,未经允许禁止用作商业用途,如有转载请注明出处. 话说好多软件和网站都能实现虚拟提示,好吧这个名词是我自己起的,因为我也不知道这么形容这个效果. 效果描述:在TextBox没 ...

  6. WebApi 能支持Session

    由于项目实际需要,我希望让WebApi服务也能支持Session,所以便查找资料按照网上的方法开始着手实验. 然后就有了以下的代码,主要是说让WebApi支持Session,要重写Global.asa ...

  7. textChanged(*)重点

    # -*- coding: cp936 -*- import sys from PyQt4 import QtCore, QtGui class MyDialog(QtGui.QDialog): de ...

  8. 一、cocos2dx概念简介

    cocos2dx概念介绍 1)scene,继承自CCScene 场景,一个游戏运行期间的显示界面,一个应用里面可以有多个场景,但是每次只能有一个是激活状态,也可以理解为一次只能显示一个界面. 例如,你 ...

  9. 动态修改UINavigationBar的背景色

    这是我们最终想要得到的效果: 思路 在UISrollView的delegate方法 1  - (void)scrollViewDidScroll:(UIScrollView *)scrollView ...

  10. boost库在工作(39)网络UDP异步服务端之九

    前面创建的UDP服务器和客户端,都是同步的方式,也就是说当接收数据时,不能参与别的事情执行的.如果在一个只有界面线程的程序里,又不想创建多线程,导致复杂程度的增加,在这种情况之下,我们还有一个方案可以 ...