如何优雅地画一棵树

前言

不知道你有没有找过一些工具来画数据结构的图,我反正是找了不少。windows下的visio是挺强大的,不过在linux没法使用,当然你非要使用也可以安装wine;亿图也不错,支持画数据结构图,不过是收费的。然而前面这些都不是重点,重点是他们画图都是拖拽类型的,手残党实在把持不住。最后终于发现了一款程序员画图神器-graphviz。《什么是二叉查找树》文中的树图就是用该工具画的.

graphviz简介

Graphviz是开源图形可视化软件。图形可视化是一种将结构信息表示为抽象图和 络图的方法。 它在 络,生物信息学,软件工程,数据库和 页设计,机器学习以及其他技术领域的可视化界面中具有重要的应用。–来自Graphviz官 https://www.graphviz.org/。

实际上它和markdown类似,markdown用纯文本编写文档,而能够转化成格式丰富的html,而graphviz使用dot标记语言来编写,能够被转换成svg,png,jpg等图形格式。甚至可以说,它就是用纯文本来完成画图。

除此之外,它还提供多种语言的api接口,例如,C,python,java,ruby等,也就是说,你可以根据自己的需要通过编写代码来生成你需要的图形。不过文本不准备使用这种方式,而是直接使用dot语言来画我们需要的图。

安装

安装完后就可以直接使用dot命令了。window下还有可视化界面,可以一边编写,一边预览。

如何画二叉树

将上面的内容保存在一个文件,并以.dot结尾,例如tree.dot。然后在命令行执行命令:

其中-Tpng表明要将该dot文件转换为png格式的图片,当然你也可以转换为svg,jpg等其他格式的图片。-o 后面是输出文件名。最后会在目录下发现下面的图片:

是不是很简单/p>

当然在这里有必要对内容进行一些说明。

  • digraph说明这是一个有向图,也就是后面的指向都是有方向的。

  • binaryTree只是起的一个名字。

  • 文中用->来表明节点的指向。而style=dotted表明该箭头会是虚线箭头。

  • 每行以分 结尾。

一棵漂亮的二叉树

但是你有没有发现一个问题,二叉树各个节点分布并不是那么好看,如果再去掉一个节点,会变成下面这样:

完全没有左右孩子的感觉了对不对怎么办呢幸的是,有人已经做了一个优化。将下面的内容保存为文件binarytree.gvpr或从这里https://gist.github.com/Sciss/2878988 下载:

这样再次执行命令的时候,只要像下面这样的方式使用即可:

最后得到的图形如下:

增加一个节点后变成下面这样:

去掉样式之后变成这样:

是不是好看很多呢/p>

总结

讨论

你有什么好的画图工具迎留言分享。

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年3月8日
下一篇 2019年3月9日

相关推荐