0%

使用Graphviz画树形结构示意图

引言

对于开发人员来说树形结构是一种非线性结构,与数组、栈、队列等线性结构相比,复杂度更高。要深入理解和掌握树形结构,亲自绘制树形结构示意图是一种有效的方法,正所谓想要做到心中有“树”,需要自己动手实践。本文介绍一款高效的绘图工具Graphviz,并演示2个使用 Graphviz 绘制树形结构的例子,同时文章还会推荐一些相关的工具,帮助读者更容易地入门。

Graphviz简介

Graphviz ,是Graph Visualization Software的缩写,是由AT&T实验室精心打造的开源工具包,它在生成各种图形表示方面应用广泛。Graphviz采用DOT语言描述图表,并通过布局引擎解析脚本,自动完成脚本的布局, 此外,它还支持多种丰富的导出格式,包括SVG和PDF等。

我对Graphviz的喜爱源于其自动布局的特性,它真正实现了“Graph as code”的理念,即像编写代码一样绘制图形。Graphviz的强大之处在于其“所思即所得”(WYTIWYG,what you think is what you get)的工作方式,这与传统的“所见即所得”(WYSIWYG,what you see is what you get)工具截然不同。普通的所见即所得工具依赖于鼠标拖拽操作,而使用Graphviz时,我的主要职责是编写DOT脚本,只需关注图形中各元素之间的关系,无需分心于布局问题,这让我从排版的繁琐中解放出来。在日常开发工作中,这一点尤为重要,我们希望在构思代码的同时,能够专注于数据结构本身,快速根据我们的思路生成示意图,而不必时刻考虑排版问题。这样的工作方式让我们能够更加专注于工作本身,将注意力集中在问题的核心上。

我的实践

本节演示2个用Graphviz画树形结构的例子,让大家对Graphviz先有个直观的认识。

实践1 树形结构示意图

我接到了一个关于树形结构的开发任务,需要将数据按照省,市,区县的结构组织成树形结构, 借助Grapihviz可以很方便的绘制一个树形结构示意图,方便开发者沟通交流,效果图如下。

OrgTree-preview

树形结构图对应的源码如下,可以看到只需要定义节点及节点之间的关系,不需要关心布局。

OrgTree-codesnippet

实践2 双向链接树形结构示意图

一般的树形结构从父节点可以找到子节点,但是从子节点找不到父节点,我需要构造一个双向链接的树形结构,也即从子节点也可以找到父节点,例如我想知道市辖区属于哪个地市,则需要通过子节点不断向上遍历直到找到合适的父节点。 下图是用Graphivz绘制的示意图,可以看到父子节点之间的箭头是双向的。

OrgMultiLinkTree-preview

如下是对应的源码,这里箭头的指向为双向。

OrgMultiLineTree-codesnippet

工具推荐

前几节介绍了Graphviz以及使用它的原因, 并且展示了我用它画树形结构的实例,本节介绍一些具体的工具,方便大家入门。

推荐1 Graphviz 命令行工具

Graphviz其实是一个命令行工具,使用它之前需要先安装,不同的操作系统安装方式不同,具体可查看官网 https://graphviz.org/

  • 如果是mac可通过homebrew或者port安装
  • 如果是windows可直接下载安装包
  • 如果是linux根据不同的发行版用不同的包管理软件安装 如aptyum

如下是用Graphviz命令将dot源文件生成图片的命令示例

1
dot -Tpng input.dot -o output.png

推荐2 vscode插件

Graphviz 是一个强大的命令行工具,但使用起来可能不太方便。幸运的是,VSCode 提供了一些插件,可以显著改善用户体验,使使用 Graphviz 更加直观和友好,下面介绍一些好用的插件。

  1. Graphviz language support for visual studio code

提供语法高亮

vscode-Graphviz-language-support-for-visual-studio-code

  1. Graphviz Preview

可以快速预览或者导出graphviz文件,这样就不需要记忆具体的命令了。

vscode-Graphviz-Preview

推荐3 python接口

很多编程语言会集成 Graphviz 绘图工具,PyGraphviz是Graphviz的Python接口,允许开发者使用Python代码与Graphviz进行交互,实现图形的创建、布局、可视化和分析

官网 https://github.com/pygraphviz/pygraphviz

总结

通过掌握基本的 DOT 语言和 Graphviz 工具,用户可以轻松创建和自定义自己的图形,满足常见的可视化需求。正所谓一图胜千言,不论是在学术研究、软件开发还是日常工作中,Graphviz 都能够提供极大的便利和帮助,赶快实践起来,体验它的强大功能吧!


微信端的朋友也可关注我的公众号

qrcode-12cm