Graphviz 画图教程
文章目录
- 介绍
- 安装
- 普通图
- 简单画图
- 进阶画图
- 树状图
- 哈希表
- 子图
- 定义子图
- 子图进阶
- 附录
- 主要结点属性
- 主要边属性
- 主要图属性
- 结点形状
- dot语法
介绍
Graphviz是一个常用的绘图工具,可以通过编写dot脚本绘制一系列的图片,例如流程图、树形图等框架图,并使用dot命令生成图片。
安装
可以到Graphviz官网下载安装包:下载地址
安装完成后,将其安装地址的...\Graphviz2.38\bin
文件夹加入环境变量
普通图
简单画图
关于Graphviz的语法我就不详细说了,网上有许多资料,我希望是通过例子来帮助大家理解如何使用。
首先你需要新建一个文本文档(txt)就行,然后打开文档,开始画图吧。
首先画一个有向图:
digraph G{}
这时候我们就定义个一个有向图,接下来我们需要在中间加入一些自定义的结点。
digraph G{a->b;b->c;a->c;
}
好了,我们已经定义好一个简单的有向图了,然后我们将其保存为deme.dot
(记得要改后缀名.dot
)。
接下来我们利用dot
命令将其导出。
打开CMD
窗口,进入该demo.dot
所在目录,然后输入如下命令:
dot -Tpng demo.dot -o demo.png
我们可以看到已经生成了一个.png
文件,如图所示
进阶画图
上面只是展示了如何画一个简单的图,那么,如果我想改变结点的形状,线的颜色之类的属性,如何画图呢?让我们看看下面的代码:
digraph G{a->b->c[color=red];a->c [label="a to c"];b->{d,e} [style=dotted];a [shape=polygon,sides=5,peripheries=4,color=lightblue,style=filled];c [shape=box];d [shape=triangle,label="I am d"];
}
同样通过如下命令导出png图片:
dot -Tpng demo.dot -o demo.png
你会发现,我们修改了结点及边的属性,how?
对于每条边,只要在其后面增加一对[]
,里面填入需要修改的属性,而对于结点,只需要在后面增加几条语句对其定义属性就可以了,是不是很有趣?
树状图
digraph G {node [shape=record,height=.3];node0[label = "<f0> |<f1> G|<f2> "];node1[label = "<f0> |<f1> E|<f2> "];node2[label = "<f0> |<f1> B|<f2> "];node3[label = "<f0> |<f1> F|<f2> "];node4[label = "<f0> |<f1> R|<f2> "];node5[label = "<f0> |<f1> H|<f2> "];node6[label = "<f0> |<f1> Y|<f2> "];node7[label = "<f0> |<f1> A|<f2> "];node8[label = "<f0> |<f1> C|<f2> "];node0:f2 -> node4:f1;node0:f0 -> node1:f1;node1:f0 -> node2:f1;node1:f2 -> node3:f1;node2:f2 -> node8:f1;node2:f0 -> node7:f1;node4:f2 -> node6:f1;node4:f0 -> node5:f1; node [color=red,height=.1];a->b;c->d;}
可以看到,我们用它画了一个树状图,代码中是什么含义呢?
- 首先我们定义一个
node
类,其下的所有结点都是record
类型,并且height=0.3
- 然后每个
record
结点使用HTML语法<f0>
添加标签,并且利用|
类似表格分隔, - 接下来对每个结点,我们指定它的哪一部分和下一结点的哪一部分相连。
- 最后又定义一个
node
类,为a
指向b
。 - 为了更清晰的了解每一个
node
类的范围,最好用一对{}
将其包围起来。
哈希表
digraph G {nodesep=.05;rankdir=LR;node [shape=record,width=.1,height=.1];node0 [label = "<f0> |<f1> |<f2> |<f3> |<f4> |<f5> |<f6> | ",height=2.5];node [width = 1.5];node1 [label = "{<n> n14 | 719 |<p> }"];node2 [label = "{<n> a1 | 805 |<p> }"];node3 [label = "{<n> i9 | 718 |<p> }"];node4 [label = "{<n> e5 | 989 |<p> }"];node5 [label = "{<n> t20 | 959 |<p> }"];node6 [label = "{<n> o15 | 794 |<p> }"];node7 [label = "{<n> s19 | 659 |<p> }"];node0:f0 -> node1:n;node0:f1 -> node2:n;node0:f2 -> node3:n;node0:f5 -> node4:n;node0:f6 -> node5:n;node2:p -> node6:n;node4:p -> node7:n;}
解释一下:
- 首先我们设定了一些属性:
nodesep
为,rankdir=LR(left to right
为结点的方向,默认是TP(top to bottom)
- 然后再定义了一个结点类,为左边的竖框
- 再定义一个新的结点类,为右边的哈希结点
- 注意到这次使用的标签不再是
<f>
而是换成了其他的<n>, <p>
子图
定义子图
digraph G {subgraph cluster0 {node [style=filled,color=white];style=filled;color=lightgrey;a0 -> a1 -> a2 -> a3;label = "process #1";}subgraph cluster1 {node [style=filled];b0 -> b1 -> b2 -> b3;label = "process #2";color=blue}start -> a0;start -> b0;a1 -> b3;b2 -> a3;a3 -> a0;a3 -> end;b3 -> end;start [shape=Mdiamond];end [shape=Msquare];
}
这时我们定义了两个子图,并且在子图中定义子图的label
、color
,filled
等属性,并且在其中还定义了结点类,其中一些语句的功能,相信你看代码能够理解。
子图进阶
digraph G {compound=true;subgraph cluster0 {a -> b;a -> c;b -> d;c -> d;}subgraph cluster1 {e -> g;e -> f;}b -> f [lhead=cluster1];d -> e;c -> g [ltail=cluster0,lhead=cluster1];c -> e [ltail=cluster0];d -> h;
}
这里我们设定了compound
属性,使其能够使得结点与子图相连,同时,连接线不覆盖子图,并使用ltail
和lhead
定义连接的头尾。
附录
主要结点属性
主要边属性
主要图属性
结点形状
dot语法
Graphviz 画图教程相关推荐
- ggplot2画图教程
ggplot2画图教程 ggplot2是什么? ggplot2是用于绘图的R语言扩展包,其理念根植于<Grammar of Graphics>一书.它将绘图视为一种映射,即从数学空间映射到 ...
- Matplotlib画图教程:在QT界面中嵌入三维图片
Matplotlib画图教程:在QT界面中嵌入三维图片 需求: 做项目报告的时候,有这么一个想法,就是能通过UI随时调用matplotlib进行二维图和三维图的绘制.因此就诞生了做这么一个小模块的想法 ...
- Python画图教程~海龟画图~turtle
个人博客:https://tang2333.xyz/ Python画图教程 1.运动控制 2.画笔控制 3.控制台控制 1. 运动控制 turtle.goto(x,y) 画笔定位到坐标 turtle. ...
- python在手机上可以画图吗_python简单画图教程!python怎么在屏幕上画图
python的tutle画图教程? 是turtle海龟画图,import turtle调用模块 内置一些函数,可以自己依据需求加入,网上有教程的 什么,Python可以画图写报告 是的,比如matpl ...
- python画图大全_python画图教程
python画图教程内容摘要 python画图教程这个方法是通过如何设置权限,郑州室内设计教程,1真品劳力士的把头.①注册微信:纹身师教程,1注册域名即是网址2申请网站空间3把要放到网上的资料做成网页 ...
- 【莫烦Python】Matplotlib Python画图教程
目录 前言 1.基本使用 1.1 基本用法 1.2 figure图像 1.3 设置坐标轴1 1.4 设置坐标轴2 1.5 Legend图例 1.6 Annotation标注 1.7 tick能见度 2 ...
- GraphViz 使用教程-用代码生成有向图。并介绍流程图、时序图等绘图工具
GraphViz 图形工具使用教程综合篇 GraphViz简述 GraphViz基本元素 生成一个有向图 node属性.edit属性和subgraph的使用 如何安装GraphViz GraphViz ...
- CAD画图教程:CAD怎么画一条指定长度的线?
在CAD入门学习过程中,画直线是基础操作之一,所以一定要对此熟练掌握才可以.那你知道CAD怎么画一条指定长度的线吗?本节CAD画图教程就和小编一起来了解一下在浩辰CAD软件中怎么画一条指定长度的直线吧 ...
- 海龟画图 python禁行的交通标志_Python画图教程~海龟画图~turtle
个人博客:https://tang2333.xyz/ Python画图教程 1.运动控制 2.画笔控制 3.控制台控制 1. 运动控制 turtle.goto(x,y) 画笔定位到坐标 turtle. ...
- 【莫烦Python】Matplotlib Python 画图教程 目录引导
1.[莫烦Python]matplotlib Python画图教程 Matplotlib基本用法 2.[莫烦Python]Matplotlib Python 画图教程 figure图像 3.[莫烦Py ...
最新文章
- C# 语言规范_版本5.0 (第10章 类)
- BCI competition IV 2b简介
- ps4看b站 f怎么调html5,b站html5,b站怎么切换到HTML5版播放器?
- generator 1【矩阵快速幂】
- 机器学习入门(2)之模型评估与选择
- 后台系统应该具备的素养
- springboot mysql事物_springboot如何开启数据库事务
- Vue开发实例(03)之Vue项目引入element_ui
- 电信光猫桥接+ML固件路由器实现ipv6网站访问
- 【Love2d从青铜到王者】第一篇:Love2d入门以及安装教程
- web前端网页制作 小组作业(制作一个简单的小网页)
- 本以为能躺着进华为,结果陆续收到京东/滴滴/爱奇艺offer的我迷茫了
- 什么是GML?GML例子
- mfc下创建html文件,用MFC怎么创建TXT文件并写入数据
- Java应用DevOps工具链推荐
- linux中read函数读取文件夹内文件,linux下read函数
- 杰理之怎么区分芯片是不是烧写器烧写完后第一次运行?【篇】
- 电商秒杀系统设计思路和实现方法
- 诺基亚S60手机c盘、d盘、e盘、z盘的作用
- python朋友圈技巧_原创|你必须拥有的四个微信高级技巧
热门文章
- 5G无线关键技术 — 大规模天线技术
- 缅柬泰之色---彩图大串联 一 (缅甸篇)
- ANSYS 有限元分析 接触分析
- 常用的linux技巧,Linux Shell常用技巧(十二)-第二部分
- 机器码解除教程,逃离塔科夫机器码解除,彩虹6号机器码解除,dayz机器码解除,腐蚀rust机器码解除
- android 自定义字体 ttf,Android使用自定义字体的方法
- 如何在腾讯云学生服务器搭建个人网站——配置web开发环境详细步骤
- 0.1 番外篇: UML 类图
- 程序员的一百万种变现方式 03,努力多赚零花钱
- 1688API item_search_img - 按图搜索1688商品(拍立淘)