作图神器Graphviz——学习数据结构的好帮手
Graphviz
- 1. 基本语法
- 补充
- 2. 编译运行
- 3. 一些例子
- 3.1 一个简单的二叉树
官网下载好对应系统的版本并安装 ,在terminal中输入 dot -version
可以检查安装是否成功。若未出现相应的版本信息,可以考虑配置环境变量或者重新安装。
1. 基本语法
和C语言一样,Graphviz也有一些关键字,不能作为自定义变量,以下是几个基本的关键字:
graph:定义无向图,描述为a--b
digraph:定义有向图,描述为a->b
subgraph:定义子图,子图可以单独用框框出
strict :禁止了多条线的创建,有向图中,从一个节点指向另一个节点的线只能由一条;无向图中,两个节点中只能有一条线连接。例如:有向图带有strict和不带strict的区别:
[strict]digraph { a -> ba -> bb -> a [color=red]b -> a [color=red]
}
一个整体的代码结构,下面只列举一些常用的属性,需要使用更多属性可以查看官网相关文档:
[strict](graph | digraph)[ID]
{/* 声明一些图的属性 [Attributes] 每条语句结尾可以用;相隔,也可省略不写*/layout=neato # 定义作图的引擎,可以改变node的组合形式,可选:dot、neato、 fdp、 patchwork rankdir= "RL" # 定义箭头的指向,可选"LR" 、“BT”(Botton->top)、"TB"labeljust=l #调整label位置,左(l) 中(c) 右(r)graph [class="ClassA"] # 定义分类bgcolor=lightgray # 图背景颜色color="yellow" # 框颜色 node [shape=record,color = red,fillcolor=yellow, style="rounded,filled"] #定义node的全局属性# shape定义node形状;style定义node的属性:filled(填充)、rounded(圆角)edge [style = dotted,weight=8,color=red] # 定义edge的全局属性# style定义线的类型,可选:dotted(虚线),bold(加粗),invis(隐藏)# weight定义线宽;color定义线的颜色subgraph cluster # 定义子图{/*[Attributes], 子图的属性可以参考以上关于图的属性*/# 除了node和edge定义的全局属性,还可以在语句后加[]特化某个node或者edgeNodeA [label="{ a | b | c }"] # 多个label可以用 | 分隔NodeB [label="<f0> one|<f1> two"] # f0 f2 f3...分别表示了一个node中的不同位置。# 一个节点也可以指向多个节点:A -- {B;C} # 等价于 A -- B A -- C# 无向图# NodeA -- NodeB [style = dotted,label="It is an edge"] #有向图# NodeA -> NodeB [dir=forward] # 可选back、both、none定义箭头的指向。# NodeA -> NodeB [arrowhead = diamond] # 定义箭头的样式。15:f0:n->7:f1:se; # 选项: [(n | ne | e | se | s | sw | w | nw | c | _)]}
}
以下属性可以作用于graph、subgraph、edge、node:
label="It is a graph" # 自定义标签
fontname="Comic Sans MS" # 设置字体,默认为"Times-Roman"
fontsize="40" # 设置字体大小
fontcolor = red # 设置字体颜色
补充
Node (shape):
Edge Arrowhead (type)
Color
2. 编译运行
一个在线查看结果的网址
- (不推荐)可以直接在命令行中输入代码,软件会在当前文件夹下生成图片。基本思路就是利用管道编译并将结果重定向或者输出。缺点就是如果做复杂的图,要输入的命令很长,也不容易debug。
echo 'graph { a -- b }' | dot -Tpng -o out.png
- 可以在当前文件夹下新建
.dot
结尾的文本文件test.dot
,然后在文件中编辑
graph { a -- b }
然后在命令行输入:
dot -Tpng test.dot -o test.png #小写o
dot -Tpng test.dot > test.png #重定向形式
dot -Tpng -O test.dot #若不指定生成的文件,可使用大写O,会根据-T自动生成相应后缀文件# 其他:
dot -? #查看其他选项
Graphviz可以生成多种文件格式,具体可以查看文档。
- 若觉得在命令行输入命令太麻烦,可以编写
makefile
。例如:
test.png:test.dotdot -Tpng -O $^.PHONY:clean
clean:rm -f *.png
当然在Windows中可以使用一些IDE,vscode或者Sublime;以Subline为例,简单配置一下,按键Ctrl + B
就可以方便输出了。
3. 一些例子
3.1 一个简单的二叉树
digraph BinaryTree {a -> ba -> cb -> dd [label="null"];node1[shape=point, style=invis]b -> node1[weight=10, style=invis]b -> ec -> fnode2[shape=point, style=invis]c -> node2[weight=10, style=invis]c -> gg [label="null"];e -> hh [label="null"];node3[shape=point, style=invis]e -> node3[weight=10, style=invis]e -> ii [label="null"];f -> kk [label="null"];node4[shape=point, style=invis]f -> node4[weight=10, style=invis]f -> jj [label="null"];
}
作图神器Graphviz——学习数据结构的好帮手相关推荐
- 【安利】程序猿作图神器 - Graphviz
还在为在linux下画二叉树等图苦恼吗,现在就安利一波linux程序猿的作图神器--Graphviz.(本来在写其他东西,刚好要绘图,强行插入一篇blog) Graphviz (Graph Visua ...
- 十分钟了解绘图神器——Graphviz学习笔记
DOT语言学习笔记 设置点和线的形状与颜色 digraph是有向图,graph是无向图.要注意,->和–都表示图中的一条边,但是前者用于有向图中,而后者用于无向图中,不能混用. 代码示例 dia ...
- 绘图神器 —— Graphviz 绘制数据结构相关图形
复杂标签 digraph graphname{/* 把节点的形状设置为 record,默认的是圆角矩形 */node [shape = record];root [label = "left ...
- 推荐10个堪称神器的学习网站,IT学习网站
挑选了 10 个堪称神器的学习网站,推荐给大家.如果觉得不错的话,文末请点赞. 01.大学资源网 大学资源网是一个完全免费并且功能非常强大的学习网站,它免费提供了丰富并且全面的学习视频教程,并且视频课 ...
- 学习数据结构的意义和作用
什么是数据结构,为什么要学习数据结构?数据结构是否是一门纯数学课程?它在专业课程体系中起什么样的作用?我们要怎么才能学好数据结构?- 相信同学们在刚开始<数据结构>这门课的学习时,心里有着 ...
- 程序员 10个 堪称神器的学习网站
话不多说,直接上干货! 注:分享一个学习交流群796170550,有不懂的问题可以一起相互讨论 [群里还含有:Java80g学习视频+Java学习书籍+Java项目实战源码+安装软件等] 01.大学资 ...
- 【超全汇总】学习数据结构与算法,计算机基础知识,看这篇就够了【ZT帅地】2020-3-7
https://blog.csdn.net/m0_37907797/article/details/104029002 由于文章有点多,并且发的文章也不是一个系列一个系列发的,不过我的文章大部分都是围 ...
- 经典高斯算法,一起学习数据结构和算法吧!
为什么80%的码农都做不了架构师?>>> 对于想提高编程技巧的人,数据结构和算法是必修的,举一个最经典的故事向新手们说明算法的伟大. 话说很久很久以前...,一次数学课上,老师 ...
- 数据结构稀疏矩阵的加法十字链表_学习数据结构和算法的框架思维
----------- 通知:如果本站对你学习算法有帮助,请收藏网址,并推荐给你的朋友.由于 labuladong 的算法套路太火,很多人直接拿我的 GitHub 文章去开付费专栏,价格还不便宜.我这 ...
最新文章
- CenTos6.8安装Heartbeat
- 3、kubernetes应用快速入门190625
- 文献记录(part27)--A distance for belief functions of orderable set
- shell编程:对话 UNIX: 更多 shell 脚本技术
- 软件工程1916|W(福州大学)_助教博客】助教总结
- SpringActionscript3 片断
- 形如1/(a+bsinx)的积分公式的证明
- 漏洞payload 靶机_以DVRF(路由器漏洞靶机)为例解读JEB固件漏洞利用-阿里云开发者社区...
- 自己整理的申论知识体系梳理分享
- win10修改用户名||user中文名改英文名
- 赵某于2011年3月23夜被捕获
- 正心,修身,方能齐家,治国,平天下
- 阅读笔记-2022-Enhancing Sequential Recommendation with Graph Contrastive Learning
- jquery插件 邮箱后缀自动匹配 可自定义
- 数据统计平台设计与实现
- 你知道PMU与PMU的区别吗?
- Python中len的使用方法
- 大一大学计算机论文摘要,大学计算机基础小论文
- Java基础编写记事本
- QGIS如何提取最小图层范围