Graphviz 简易教程

次阅读

文章目录

2020-02-07 更新: Graphviz 官网迁移,修改链接地址。

Graphviz 是一个绘制关系图/流程图的工具包,使用它提供的 dot-language ,我们就可以在文本中通过嵌入绘制代码的方式实现图的绘制。不再需要 GUI 工具了,也更便于版本管理。

听起来有点像 SVG 的味道,不同之处在于 SVG 是使用浏览器的渲染引擎来渲染。

基本语法

让我们了解两种不同类型的图: graph 和 digraph。前者使用 -- 描述关系,后者使用 -> 描述关系。我们一般会为每张图定义一个名称。

digraph 代表 direction graph ,意指 “有方向的图“ 。

看看下面两个例子,就知道它们的区别了:

graph

1graph pic1 {

2 a -- b

3 a -- b

4 b -- a [color=blue]

5}

6

7

digraph

1digraph pic2 {

2 a -> b

3 a -> b

4 b -> a [style=filled color=blue]

5}

6

定义

对于图中的每个对象,可以采用直接使用的方式(就像上面的例子那样),也可以采用 先声明,再使用 的方式。

使用方括号来设定对象的属性。常用的属性有 shape/style/color 等等,具体的属性可查看attr , shape 的类型可查看 node-shape ,所有的文档汇总页面在这里: Graphviz Documents。

复杂的例子

下面的例子描述一个手机游戏启动后的更新流程:

1digraph startgame {

2 label="游戏资源更新流程"

3 rankdir="TB"

4 start[label="启动游戏" shape=circle style=filled]

5 ifwifi[label="网络环境判断是否 WIFI" shape=diamond]

6 needupdate[label="是否有资源需要更新" shape=diamond]

7 startslientdl[label="静默下载" shape=box]

8 enterhall[label="进入游戏大厅" shape=box]

9

10 enterroom[label="进入房间" shape=box]

11 resourceuptodate[label="资源不完整" shape=diamond]

12 startplay[label="正常游戏" shape=circle fillcolor=blue]

13 warning[label="提醒玩家是否更新" shape=diamond]

14 startdl[label="进入下载界面" shape=box]

15 //{rank=same; needupdate, enterhall}

16

17 {shape=diamond; ifwifi, needupdate}

18

19 start -> ifwifi

20 ifwifi->needupdate[label="是"]

21 ifwifi->enterhall[label="否"]

22 needupdate->startslientdl[label="是"]

23 startslientdl->enterhall

24 needupdate->enterhall[label="否"]

25

26 enterhall -> enterroom

27 enterroom -> resourceuptodate

28 resourceuptodate -> warning[label="是"]

29 resourceuptodate -> startplay[label="否"]

30 warning -> startdl[label="确认下载"]

31 warning -> enterhall[label="取消下载"]

32 startdl -> enterhall[label="取消下载"]

33 startdl -> startplay[label="下载完成"]

34}

35

其他文档

下面有两篇入门教学的文章,可以略作参考。

GUI

在节点很多的情况下,纯看代码很容易把自己绕进去。

因此,我的使用方法就是打开一个支持 GraphViz 的 GUI,一边编写,一边查看效果。

两个常用的 IDE Eclipse 和 IntillJ IDEA 都有能够支持 GraphViz 的插件。它们是通过 PlantUML 来实现支持的。至于 PlantUML 是什么,这又是另一个故事了。

在 这里 你能找到所有支持 PlantUML/Graphviz 的软件,各种论坛程序、Wiki 和文本编辑器、IDE 均在此列。Vim 和 Emacs 一个也不少,甚至还支持 Microsoft Word !

相关文章

全文完

graphviz java api_Graphviz 简易教程相关推荐

  1. java版怎么玩空岛,空岛幻想新手怎么玩?新手简易教程_游侠手游

    <空岛幻想>该怎么玩?马上就要开启测试了,还是有很多的小萌新们不知道该怎么玩.为了帮助小萌新们能够更好地玩游戏,小编特地带来了这一篇献给新手的简易教程,下面就和小编一起来看看这篇攻略吧! ...

  2. Android开发简易教程

    Android开发简易教程 Android 开发因为涉及到代码编辑.UI 布局.打包等工序,有一款好用的IDE非常重要.Google 最早提供了基于 Eclipse 的 ADT 作为开发工具,后来在2 ...

  3. Android利用zxing生成二维码,识别二维码,中间填充图片超详细、超简易教程

    gayhub上的zxing可用于生成二维码,识别二维码 gayhub地址:https://github.com/zxing/zxing 此文只是简易教程,文末附有完整代码和demo下载地址,进入正题: ...

  4. hadoop与spark环境搭建命令简易教程(Ubuntu18.04)

    hadoop与spark环境搭建命令简易教程(Ubuntu18.04) Hadoop 一.single node cluster 二.multi node cluster 三.快速版(远程复制) Sp ...

  5. java入门基础教程(纯干货知识点+视频资源)

    本套Java视频教程是黑马程序员冯老师精心录制的Java基础班视频,该视频专门针对零基础的学员录制,授课讲究通俗易懂.干货.通过该套Java视频教程的学习,相信你能够轻轻松松地入门java语言. 完整 ...

  6. Android实战简易教程-第三十九枪(第三方短信验证平台Mob和验证码自动填入功能结合实例)

    用户注册或者找回密码时一般会用到短信验证功能,这里我们使用第三方的短信平台进行验证实例. 我们用到第三方短信验证平台是Mob,地址为:http://mob.com/ 一.注册用户.获取SDK 大家可以 ...

  7. 使用码云和博客园学习简易教程

    有了<使用开源中国(码云)托管代码>和<使用博客园进行学习>, 不少同学可以使用使用码云和博客园来学习了,也有不少同学还是误用.我以一周的学习过程为例,写一个step by s ...

  8. Java实现简易聊天软件_类QQ(含课程论文、实施计划书、演示视频、答辩PPT、源代码及运行环境)

    很多BUG很多BUG很多BUG 视频演示: http://v.youku.com/v_show/id_XMjg4MDAxNTAwNA 关键部分参考: 注册界面实现-JAVA应用开发系列教程 https ...

  9. eclipse编程 创建项目 简易教程

    eclipse编程 创建项目 简易教程 应对机考 本文源于应对java的期中机考,当时有同学一直用记事本编程而不会用eclipse编程,由此产生了本文. 本文主要流程为:新建项目->新建类-&g ...

最新文章

  1. IOS之同步请求、异步请求、GET请求、POST请求
  2. 在R.java中新建自定义的新类
  3. mysql中in的用法
  4. Web前端开发笔记——第二章 HTML语言 第二节 基本标签
  5. delphi xe4 ini文件不能读取的解决方法
  6. LeetCode 24两两交换链表中的节点-中等
  7. Ubuntu 16.04: 开启wifi设置 How To Enable WiFi In Ubuntu 16.04
  8. mysql 1031错误_为什么我的mysql语句一直报错,找不到错误,望各位大佬指点一番...
  9. python读取xml文件内容_python读取xml文件
  10. java web导出excel表格,java 网页导出excel表格数据-java 将页面内容写入excel文件中并可以将其下载到......
  11. 99se 封装属性设置大全
  12. MSOCache文件夹能否删除
  13. 软件开发流程中的测试及测试方法简介
  14. python计算单词长度_python – 返回字符串中的单词长度
  15. swift和swiftui_在swiftui中查看布局和演示
  16. 大数据开发的26个专业术语
  17. ERDAS将DN值转换为TOA光谱辐射亮度时 出现建模错误原因
  18. 扫描仪显示计算机无法,扫描仪无法显示怎么办 扫描仪无法显示解决方法【详解】...
  19. shell脚本:exit 0 和 exit 1有什么区别?他们和return不同,return是关键字,exit是一个shell函数
  20. Android音频子系统(十三)------audio音频测试工具

热门文章

  1. 微商管理系统---mysql相关操作整理
  2. excel 多行插入_在Excel中插入多行
  3. 智慧校园大数据云平台(2)
  4. Yar并行的RPC框架的简单使用
  5. jquery 回到顶部动画
  6. HM各个类中保存的数据类型以及之间的联系
  7. cas67595-97-5/TAPP-Cu(2+)/四氨基苯基卟啉铜/分子式:C44H32CuN8/分子量:736.339
  8. 小米8android p怎么样,小米8推安卓P稳定版更新,官方称拍照升级为全球前三
  9. 财经计算机财务函数,19个常用财务Excel函数公式,轻松搞定一半的工作,值得收藏...
  10. oppo enco air2怎么样 值得入手吗