一、说明

1.1 Graphviz制图概述

总的来说,Graphviz 支持两类图:

  • 无向图
  • 有向图

1.2 组成部分

  • node 节点
  • edge 边
  • subgraph 子图
  • attr 属性

1.3 DOT文件

dot文件是一个文本脚本,是专门存储有向图,或无向图的信息文件,通过dot指令可以将一个dot文件转化成图片,或pef文件,可视化完成。

二、 *.DOT文件要点----关于dot的语法

2.1 无向图的语法

1)如何生成以下的无向图?

2)语句如下:

graph{ a--b; b--c; c--a;}

3)语法解释:

  • graph{} 是图的关键词,任何图都包含该语句;
  • a--b;是表示相邻顶点的“有边”关系,‘--’表示a顶点和b顶点可达,‘;’表该边描述语句完毕。

5)输出

将上述实现语句存入文本文件d:/new.dot,打开windows的cmd,进入cd d: 后,输入:

dot  -T   jpg  ./new.dot  -o  new-grap.jpg

输出完成,打开new-grap.jpg,得到:

   

图1   无向图的dot绘制案例 ( 左边图,不够美观,用graph{ a--{b,c}; b--c;} 语法代替生成右图。 )

2.2 简单有向图的语法

 1)如何生成以下的有向图?

2)语句如下:

digraph{  a->b;   a->c;    c->d;}

3)语法解释:

  • digraph{} 是有向图的关键词,任何图都包含digraph{}或graph{};
  • a->b;是表示相邻顶点的“有向边”关系,‘->’表示a顶点和b顶点出入关系可达,‘;’表该边描述语句完毕。

5)输出

将上述实现语句存入文本文件d:/new.dot,打开windows的cmd,进入cd d: 后,输入:

dot  -T   jpg  ./new.dot  -o  new-grap.jpg

输出完成,打开new-grap.jpg,得到:

图2 有向图的DOT绘制案例

三、 更丰富的dot的语法

1)带标签的语法结构

2)色彩丰富的图

digraph {player[label = "player", color = Blue, fontcolor = Red, fontsize = 24, shape = box];game[label = "game", color = Red, fontcolor = Blue, fontsize = 24, shape = ellipse];player -> game[label = "play"]
}

3 在节点插入图片

digraph {c[shape = none, image = "./D06.png"]a -> b -> c;c -> d;
}

4 在节点插入图片

节点和连线的统一定义(先进行node、edge的统一定义,在定义数据的节点):

digraph {node[color = Red, fontsize = 24, shape = box]edge[color = Blue, style = "dashed"]c[shape = none, image = "./pic.png"]a -> b -> c;c -> d;
}

5 在一个图中,嵌入子图

digraph {label = visitNetrankdir = LRnode[color = Red, fontsize = 24, shape = box]edge[color = Blue, style = "dashed"]user[style = "filled", color = "yellow", fillcolor = "chartreuse"]subgraph cluster_cd{label = "server and browser"bgcolor = green;browser -> server}user -> computer;computer -> browser;
}

6 结构视图

注意点

1 用节点定义node[shape = record];定义节点是结构

2 用label=“字符串” 定义结构的内容,用“|”分割开

3 用<结构项标号>标明结构的单项标号

3 用  结构体:单项标号->结构体:单项标号  表明关系连线

digraph {node[shape = record];struct1[label = "<f0> left|<f1> mid\ dle|<f2> right"];struct2[label = "<f0> one|<f1> two"];struct3[label = "hello\nworld | {b|{c|<here> d|e}|f}|g|h"];struct1:f1 -> struct2:f0;struct1:f2 -> struct3:here;
}

7 树形结构

digraph tree {fontname = "PingFang-SC-Light"fontsize = 24node[shape = "plaintext"]1 -> 2;1 -> 3;2 -> 4;2 -> 5;3 -> 6;3 -> 7;4 -> 8;4 -> 9;5 -> 10;5 -> 11;6 -> 12;6 -> 13;7 -> 14;7 -> 15;
}

8 继承关系

digraph UML {node[fontname = "Courier New", fontsize = 10, shape = record];edge[fontname = "Courier New", fontsize = 10, arrowhead = "empty"];Car[label = "{Car | v : float\nt : float | run() : float}"]subgraph clusterSome{bgcolor = "yellow";Bus[label = "{Bus | | carryPeople() : void}"];Bike[label = "{bike | | ride() : void}"];}Bus -> CarBike -> Car}

9 时序关系图

digraph time {rankdir = "LR";node[shape = "point", width = 0, height = 0];edge[arrowhead = "none", style = "dashed"];{rank = "same"edge[style = "solided"];APP[shape = "plaintext"];APP -> step00 -> step01 -> step02 -> step03 -> step04 -> step05;}{rank="same";edge[style="solided"];SDK[shape="plaintext"];SDK -> step10 -> step11 -> step12 -> step13 -> step14 -> step15;}{rank="same";edge[style="solided"];AliPay[shape="plaintext"];AliPay -> step20 -> step21 -> step22 -> step23 -> step24 -> step25;}{rank="same";edge[style="solided"];Server[shape="plaintext"];Server -> step30 -> step31 -> step32 -> step33 -> step34 -> step35;}step00 -> step10 [label="sends order info", arrowhead="normal"];step11 -> step21 [label="open AliPay", arrowhead="normal"];step22 -> step12 [label="pay success", arrowhead="normal"];step13 -> step03 [label="pay success", arrowhead="normal"];step24 -> step34 [label="pay success", arrowhead="normal"];
}

三、.DOT的布局器参考

以下将说明这两类图的基本语法,同时,为了丰富图像,顶点和边都具有各自的属性,比如形状,颜色,填充模式,字体,样式等。主要的布局器如下:

  • dot: 默认布局方式,主要用于有向图;
  • neato:基于 sprint model 模型,又称force-based 或者 energy minimized;
  • twopi:径向布局,放射状;
  • circo:圆环布局;
  • fdp:无向图;
  • dotty:一个用于可视化与修改图形的图形用户界面程序;
  • lefty:一个可以显示 DOT 图形的可编程控件,并允许用户用鼠标在图上执行操作。

参考文章:

  • 关于语法:GraphViz Examples and Tutorial (grevian.org)
  • GraphViz的其它用途:GraphViz的使用 - 简书 (jianshu.com)
  • 使用Graphviz和DOT语言绘图-百度经验 (baidu.com)
  • Graphviz 的中文文档,Graphviz 中文文档
  • Dot 语言介绍(想要更多了解的时候可以查看),Graphviz Dot 语言介绍
  • Python Graphviz 的入门文档,Graphviz User Guide
  • Python Graphviz 的 Example 介绍,Graphviz 的例子
  • Graphviz 的下载,Graphviz Download
  • 使用 Graphviz 的例子,生成项目UML框架图-pyreverse介绍
  • GraphViz Examples and Tutorial (grevian.org)

GraphViz:2 DOT语法和相关应用相关推荐

  1. graphviz的基本语法及使用

    基本语法 字符串 都要加双引号, 可以加\n换行符 注释 双斜杠// 或/* */ 有向图 digraph, 节点关系: 指向-> 无向图 graph, 节点关系: 连通 -- 属性 node[ ...

  2. Graphviz:利用可视化工具Graphviz将dot数据进行图像可视化或者图像保存(两大方法)之详细攻略

    Graphviz:利用可视化工具Graphviz将dot数据进行图像可视化或者图像保存(两大方法)之详细攻略 目录 graph_feature函数:为给定的特征生成特征谱系图

  3. Graphviz之DT:手把手教你使用可视化工具Graphviz将dot文件转为结构图的pdf文件

    Graphviz之DT:手把手教你使用可视化工具Graphviz将dot文件转为结构图的pdf文件 目录 Graphviz软件的下载 Graphviz将dot文件转为结构图的pdf文件 输出结果 Gr ...

  4. Graphviz之DT:手把手教你使用可视化工具Graphviz将dot文件转为结构图的png文件

    Graphviz之DT:手把手教你使用可视化工具Graphviz将dot文件转为结构图的png文件 目录 Graphviz软件的下载 Graphviz使用方法 Graphviz软件的下载 Graphv ...

  5. 用dot函数C语言画矩形,Graphviz绘图 - DOT语言

    Graphviz绘图 - DOT语言 一.关于Graphviz 1.1 简介 Graphviz (英文:Graph Visualization Software的缩写)是一个由AT&T实验室启 ...

  6. 英文写作——The Elements of Style知识点解读6—位于句首的分词短语必须和句子的语法主语相关

    The Elements of Style Elementary Rules of Usage 惯用法的基本规则 第11条: Rule 11: A participial phrase at the ...

  7. Delphi - 新语法之类相关的

    技术交流,DH讲解. 今天就把Delphi新语法中与类相关都讲了. 1 静态系列. 静态成员变量,静态方法,静态属性. 静态方法只能使用静态成员变量或者其他常量. 一个例子: typeTMyClass ...

  8. 【Java】数组Array(概念、相关语法、相关算法)

    数组 文章目录 数组 1.数组的相关概念和名词(了解) 2 .数组的相关语法 2.1. 数组的声明 2.2. 数组的初始化 2.3.数组的遍历 2.4. 数组的内存分析 3. 数组的相关算法 3.1. ...

  9. Markdown语法、相关警告配置设置——持续更新

    Markdown 一.配置 MD025-Multiple top level headings in the same document 同一文档只能有一个最高级的标题,默认是只能有一个1级标题. 解 ...

最新文章

  1. android图像处理(3)底片效果
  2. MySQL高性能优化规范建议
  3. 创建二维数组(一维长度3,二维长度6),值为一维数组和二维数组索引值的积
  4. linux和python哪个工资高,关于树莓派:用它来学习Linux及Python真的高效?
  5. 在c语言中合法标识符的第一个字符必须是,c语言合法标识符判断规则是什么?...
  6. asp.net 抓取html内容,c# – 如何从ASP.NET获取网页的HTML内容
  7. 计算机专业简述,简述计算机专业毕业论文完整版.doc
  8. 2018-2019-1 20165301 《信息安全系统设计基础》第六周学习总结
  9. java开发的程序怎么用_java安装后怎么使用?第一次编写java程序
  10. 计算机软件存储位置,微信电脑版存储位置在什么地方?查看微信电脑版存储路径的方法...
  11. 创建一个闪亮的应用程序以使用rtweet和R搜索Twitter
  12. N-Tiers开发方式(为何使用COM+组件的撰写商业逻辑层)
  13. 机器学习代码学习(一)-first-dichotomy
  14. opengl-PBR基于物理的渲染(Physically Based Rendering):理论基础
  15. Java虚拟机:Java虚拟机结构
  16. Windows下使用pip时出现TSL/SSL错误解决方案
  17. 调用百度智能云 api --新手入门教程
  18. git merge --no--ff 详解
  19. 玩手机上瘾怎么办,怎么戒
  20. C++ Python 链表逆序 反转链表

热门文章

  1. 报错整理:ImportError: cannot import name ‘mean_absolute_percentage_error‘ from ‘sklearn.metrics‘
  2. 线性代数笔记:Frobenius 范数
  3. sklearn 笔记:数据归一化(StandardScaler)
  4. ntu 课程 ERIC(2):Planning your research
  5. Linux查看utmp文件,linuxc操作utmp和wtmp文件接口
  6. Python编程基础:第五十二节 高阶函数High Order Functions
  7. 从平台到中台:Elaticsearch 在蚂蚁金服的实践经验
  8. spring-data-redis工程
  9. Lesson 6.5Lesson 6.6.1Lesson 6.6.2 机器学习调参基础理论与网格搜索多分类评估指标的macro与weighted过程GridSearchCV的进阶使用方法
  10. 研究38位知名CEO的邮件后,我们有这9个发现