文章目录

  • 1. 无向图
  • 2. 有向图
  • 3. 进阶
    • 3.1 指定边射出的方向
    • 3.2 修改图片的朝向
    • 3.3 绘制类似结构体的图形
  • 4. 其他

在Windows10下VS Code配置Graphviz和DOT语言环境这篇文章中,我们配置了Graphviz的语言学习环境。现在开始学习DOT这个纯文本图像描述语言的常用语法。


1. 无向图

无向图的格式如下:

graph 名字 {无向图的内容
}

无向图使用 a--b 的形式来描述边,Graphviz会自动调整每个节点的位置。简单示例如下:

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

预览效果如下:

如果边数太多,可以使用 a -- {b; c; d; e} 的方式来描述多条边,比如:

graph example {a -- {b; c; d; e; f; g; h};
}

预览效果如下:

如果还需要不同的形状和颜色,可以参考以下示例:

graph example {a -- b[color = red; label = "岛风"];a -- c[label = "恶毒"];b -- {d; e}[label = "z23"];b[shape = box];
}

预览效果如下:

即边和点的后面,可以使用 [color=xxx] 表示颜色,使用 [label="xxx"] 表示边权,[shape=xxx] 表示形状。常用的形状(点)有:box, oval, circle, point, egg, triangle, square, record 等,更多细节可以参考Graphviz的官方文档。

如果需要同时设置所有的边或点,可以使用 edge[xxx]node[xxx] 。一个简单示例如下:

graph example {edge[color = red];node[shape = box];a -- b;b -- c;
}

预览效果如下:


2. 有向图

有向图的格式和无向图基本一样,只是边使用 a -> b 来描述:

digraph 名字(随意){图
}

简单示例如下:

digraph example {node[shape = circle];root[shape = box];root -> {b; e};b -> {c; d};
}

预览效果如下:


3. 进阶

3.1 指定边射出的方向

使用具体示例来说明:

digraph example{a0:w -> b0; //其中w意思是west,支持w,e,n,s,sw,se,nw,nea1:e -> b1;a2:n -> b2;a3:s -> b3;a4:nw -> b4;a5:ne -> b5;a6:sw -> b6;a7:se -> b7;
}

预览效果如下:

3.2 修改图片的朝向

把上面的例子做些修改,添加 rankdir = LR; ,将图片横置:

digraph example {rankdir= LR;a0:w -> b0; //其中w意思是west,支持w,e,n,s,sw,se,nw,nea1:e -> b1;a2:n -> b2;a3:s -> b3;a4:nw -> b4;a5:ne -> b5;a6:sw -> b6;a7:se -> b7;
}

预览效果如下:

3.3 绘制类似结构体的图形

下面以一个链表示例来解释:

digraph example {rankdir = LR;node[shape = record]; //record形状a[label = "{A|}"]; //每个'|'都是一列b[label = "{B|}"];c[label = "{C|}"];d[label = "{D|NULL}"];a -> b:w;b -> c:w;c -> d:w;
}

预览效果如下:

再通过几个示例,来学习 record

digraph example {a[shape = record; label = "A | B | C | D"];
}

预览效果如下:

digraph example {rankdir = LR;a[shape = record; label = "A | B | C | D"];
}

预览效果如下:


4. 其他

Graphviz还有很多功能,比如更换不同的排版引擎等,以后有时间再写一下。学习Graphviz的同时,还可以学一下PlantUML——基于Graphviz和Java,用于快速绘制UML图的特化工具,其环境配置见这篇文章。

【有用工具】画图工具之Graphviz学习笔记相关推荐

  1. 十分钟了解绘图神器——Graphviz学习笔记

    DOT语言学习笔记 设置点和线的形状与颜色 digraph是有向图,graph是无向图.要注意,->和–都表示图中的一条边,但是前者用于有向图中,而后者用于无向图中,不能混用. 代码示例 dia ...

  2. 02_clickhouse安装,卸载,启动/关闭服务,交互式命令(数据库创建,数据导入,查询),批模式数据导入,MySQL接口操作ClickHouse,DBeaver可视化工具安装与使用(学习笔记)

    1 ClickHouse安装 安装文件清单 clickhouse-client-${version}.noarch.rpm clickhouse-common-static-dbg-${version ...

  3. PYRIT 强大的密码分析工具(可使用GPU分析)-学习笔记

    优势: 可运用GPU的运算加速生成PMK 本身支持抓包获取四步五首过程,无需用Airodump抓包 也支持传统的读取airodump抓包获取四步握手的方式 只抓取WAP四次握手过程包 pyrit -r ...

  4. C51单片机学习笔记(一)——搭建开发环境及烧写工具

    C51单片机学习笔记(一)--搭建开发环境及烧写工具 文章目录 C51单片机学习笔记(一)--搭建开发环境及烧写工具 1.搭建软件开发环境及使用(Keil uVision) 2.将程序下载到单片机(烧 ...

  5. Android学习笔记:Android基础知识点(不断更新中)

    1.Android学习笔记:OkHttp 2.Android学习笔记:更新UI的方法(UI线程和非UI线程) 3.Android学习笔记:Volley 4.Android学习笔记:Handler 5. ...

  6. IBatis.Net学习笔记系列文章

    IBatis.Net是一个比较易用的ORM框架,使用起来较为方便.灵活. 在此记录我学习的过程,作为自己的一个总结. 1.IBatis.Net学习笔记一:开篇 2.IBatis.Net学习笔记二:下载 ...

  7. Python3 爬虫学习笔记 C09【数据储存系列 — 文件储存】

    Python3 爬虫学习笔记第九章 -- [数据储存系列 - 文件储存] 文章目录 [9.1]TXT 文本存储 [9.1.1]基本示例 [9.1.2]打开方式 [9.2]JSON 文件存储 [9.2. ...

  8. python爬虫学习笔记 1.9 (Handler处理器 和 自定义Opener)

    python爬虫学习笔记 1.1(通用爬虫和聚焦爬虫) python爬虫学习笔记 1.2 ( HTTP和HTTPS ) python爬虫学习笔记 1.3 str和bytes的区别 python爬虫学习 ...

  9. 【毕业设计之python系列】基于Flask的在线学习笔记的设计与实现

    基于Flask的在线学习笔记的设计与实现 摘要 在线学习笔记系统是一种为学生和教师提供在线学习和教学的平台.本文基于Flask框架,设计并实现了一个在线学习笔记系统.该系统支持用户注册.登录.创建课程 ...

最新文章

  1. Arduino学习笔记1---开发环境搭建
  2. cannot open line '/dev/tty.usbserial' for r/w resource busy
  3. JavaScript中的私有成员
  4. 极光推送 请检查参数合法性_极光(JG.US)牵手中国人寿数据中心,合作助推智能用户运营_行业动态...
  5. python request下载文件_Python3.4.3使用urllib.request下载文件带进度显示
  6. 用非递归方式实现二叉树后序遍历
  7. 清华毕业生做保姆,那又如何呢
  8. php计算1992年到现在,1992年以前 | 物质计算科学研究室 - Powered by MYPHP
  9. 汽车之家港股上市发行价定为176.3港元 募资35.6亿港元
  10. 你不知道的接口测试之简单的开始
  11. 关于使用jacob出现的异常
  12. 复选框式查询 例题租房子
  13. python中合法命名的变量名_「变量名」python中变量的命名以及使用 - 金橙教程网...
  14. 台式计算机睡眠状态耗电多吗,电脑休眠后,会不会耗电的?
  15. cygwin装linux系统,给cygwin安装命令package
  16. 蓝桥杯--算法提高 字符串跳步
  17. 在python中month函数的用法_python @classmethod 的使用场合
  18. Spring的运行原理
  19. React.js介绍
  20. mysql mybatis批量删除,Mybatis批量删除多表

热门文章

  1. 解决服装老手瓶颈——服装店铺软件全方面调控
  2. Android build.gradle配置文件
  3. Java 加解密技术系列之 PBE
  4. 走迷宫(maze) 难度**
  5. Git入门-本地仓库
  6. 汤姆大叔的博客 -【1】编写高质量JavaScript代码的基本要点
  7. invalid comparison: java.util.Date and java.lang.String“, “data“: null 时间格式转换异常
  8. Android-JNI2
  9. 爬虫---scrapy爬虫框架(详细+实战)
  10. linux正则表达式踩坑