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——学习数据结构的好帮手相关推荐

  1. 【安利】程序猿作图神器 - Graphviz

    还在为在linux下画二叉树等图苦恼吗,现在就安利一波linux程序猿的作图神器--Graphviz.(本来在写其他东西,刚好要绘图,强行插入一篇blog) Graphviz (Graph Visua ...

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

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

  3. 绘图神器 —— Graphviz 绘制数据结构相关图形

    复杂标签 digraph graphname{/* 把节点的形状设置为 record,默认的是圆角矩形 */node [shape = record];root [label = "left ...

  4. 推荐10个堪称神器的学习网站,IT学习网站

    挑选了 10 个堪称神器的学习网站,推荐给大家.如果觉得不错的话,文末请点赞. 01.大学资源网 大学资源网是一个完全免费并且功能非常强大的学习网站,它免费提供了丰富并且全面的学习视频教程,并且视频课 ...

  5. 学习数据结构的意义和作用

    什么是数据结构,为什么要学习数据结构?数据结构是否是一门纯数学课程?它在专业课程体系中起什么样的作用?我们要怎么才能学好数据结构?- 相信同学们在刚开始<数据结构>这门课的学习时,心里有着 ...

  6. 程序员 10个 堪称神器的学习网站

    话不多说,直接上干货! 注:分享一个学习交流群796170550,有不懂的问题可以一起相互讨论 [群里还含有:Java80g学习视频+Java学习书籍+Java项目实战源码+安装软件等] 01.大学资 ...

  7. 【超全汇总】学习数据结构与算法,计算机基础知识,看这篇就够了【ZT帅地】2020-3-7

    https://blog.csdn.net/m0_37907797/article/details/104029002 由于文章有点多,并且发的文章也不是一个系列一个系列发的,不过我的文章大部分都是围 ...

  8. 经典高斯算法,一起学习数据结构和算法吧!

    为什么80%的码农都做不了架构师?>>>    对于想提高编程技巧的人,数据结构和算法是必修的,举一个最经典的故事向新手们说明算法的伟大. 话说很久很久以前...,一次数学课上,老师 ...

  9. 数据结构稀疏矩阵的加法十字链表_学习数据结构和算法的框架思维

    ----------- 通知:如果本站对你学习算法有帮助,请收藏网址,并推荐给你的朋友.由于 labuladong 的算法套路太火,很多人直接拿我的 GitHub 文章去开付费专栏,价格还不便宜.我这 ...

最新文章

  1. CenTos6.8安装Heartbeat
  2. 3、kubernetes应用快速入门190625
  3. 文献记录(part27)--A distance for belief functions of orderable set
  4. shell编程:对话 UNIX: 更多 shell 脚本技术
  5. 软件工程1916|W(福州大学)_助教博客】助教总结
  6. SpringActionscript3 片断
  7. 形如1/(a+bsinx)的积分公式的证明
  8. 漏洞payload 靶机_以DVRF(路由器漏洞靶机)为例解读JEB固件漏洞利用-阿里云开发者社区...
  9. 自己整理的申论知识体系梳理分享
  10. win10修改用户名||user中文名改英文名
  11. 赵某于2011年3月23夜被捕获
  12. 正心,修身,方能齐家,治国,平天下
  13. 阅读笔记-2022-Enhancing Sequential Recommendation with Graph Contrastive Learning
  14. jquery插件 邮箱后缀自动匹配 可自定义
  15. 数据统计平台设计与实现
  16. 你知道PMU与PMU的区别吗?
  17. Python中len的使用方法
  18. 大一大学计算机论文摘要,大学计算机基础小论文
  19. Java基础编写记事本
  20. QGIS如何提取最小图层范围

热门文章

  1. iFunk双子变形本曝光,质感出众
  2. JPG图片怎么转成PDF还免费?
  3. 如何学习word?这几个Word技巧我吐血推荐!
  4. CSMA和ALOHA的python协议仿真分析(附带程序下载链接,面对对象实现)
  5. 三子棋_井字棋(C语言实现)
  6. 如何保存EDIUS工程里面的素材
  7. python数据分析:流量数据化运营(上)——知识点
  8. 钢琴、小提琴学哪个?
  9. mysql优化案例,mysql优化实例汇总
  10. java 不停的换ip地址_为什么电脑IP地址总是自动改变