浅谈图的层次布局

图是一种常见的数据结构和表示形式,可视化场景也经常会用到图来展现有关联关系的数据。进行图的可视化时,往往需要将其自动布局,而针对不同的问题和场景,需要不同的布局方法。本文主要介绍图的层次布局的思路。

一些常用的图的布局方法。图片截自G6[1]

在数据有一定层级结构或先后顺序时,经常会用到层次布局来展现,一般对应的数据结构是DAG(Directed Acyclic Graph,即有向无环图)。常用的场景包括:流程图、组织架构图、状态转移图等。

层次布局[2]的方法是 Kozo Sugiyama 首先于1981年详细阐明的,因此也常被称为 Sugiyama 布局。这里我们讲一下Sugiyama布局的思路。

根据图的数据,自动画出一个易于理解的有层次(hierarchy)的图。

这样,给节点分层后,把每层的节点放到合理的水平位置,就可以把图画出来。

根据以上原则,Sugiyama把图的布局问题分成了多个步骤,每个步骤解决不同的子问题。Sugiyama算法总共分为以下4步。

看起来是很简单的4步,但每一步的实现都并不简单,也有很多种不同的算法。

怎么把节点分到不同的层呢?这里介绍几种算法。

首先最容易想到的可能就是最长路径算法。即一个节点的层级等于要到达它需要走过的最长路径。最长路径算法的优点是速度很快,遍历图即可完成分层。然而它有比较明显的问题:节点被分到尽可能低的层级,给图的下方留出很多空白,并且可能会出现很多长边。不过,由于它速度快,经常被用于分层的预处理,粗分层后再交给其他算法来进行优化。

一个最长路径算法得到的结果,截自d3-dag[3]

紧致树算法就是一种优化方法,目的是减少长边的数量。从名称可以看出,「紧致」,即调整节点的分层,使更多边变成“紧致边”。

主要思路:

一个Network Simplex算法得到的结果,截自d3-dag[4]

怎样画一个图才是美观、可理解的是比较主观的,但尽可能减少边的交叉这个标准得到了广泛的认可。

由于节点已经分层,纵坐标已确定,且对于每个长边也已经通过增加伪节点的方式被分成了相邻层之间的短边,减少边的交叉问题就变成了如何对层内节点排序的问题。

然而已经有研究证明,即使是最简单的情况,即只处理两层之间的交叉,这个问题仍是一个NP困难[5]问题。因此,很多启发式算法被提出来解决这个问题,比较经典的是重心算法和中心算法。

根据此前所述原则,计算每层节点的坐标主要的目的是:边尽量垂直、节点布局平衡、长边尽量直。

Sugiyama提出了一种二次规划算法(Quadratic Programming)和一种基于优先级的启发式算法(我都没看懂)。之后也有很多研究者提出了多种不同的算法。

这里介绍一下 dagre 中使用的 Brandes & Kopf 提出的一种简单快速的启发式算法,在线性时间内即可完成坐标计算。(不过这个算法似乎会导致一些异常情况,见issue[6])

实际布局的过程中,可能还会有更多需要考虑的点。这里列举一些供大家参考,就不详细展开了。

一个有嵌套的图,截自ELK[7]

Sugiyama布局提供了图的层次布局的基本框架,而实际业务场景中的需求可能各有侧重,已有的布局方法可能无法满足要求,就需要实现自己的布局方式。

因为Sugiyama布局已经把布局分成了不同的步骤和子问题,所以比较灵活。可以对其进行调整,在不同的步骤使用不同的算法达到目的。举个例子,下图这种流程图,边的关系不复杂,没有长边,即使边有交叉也影响不大,展示的重点可能是整个图的居中的效果,那么在分层、去交叉之后,第三步计算坐标时,可以直接用简单的居中对齐的方式排布节点。

dagre[8]是一个实现了层次布局的 js 库,G6 就是直接引用的 dagre 来实现的层次布局。

布局流程很清晰地写在了这个runLayout方法里,虽然看起来有27步之多,整体思路还是我们上面说的:分层、减少交叉、计算坐标。而dagre也增加了一些比如去自环、去环等一些预处理,以及支持了我们上面提到一些其它能力比如:边的label、嵌套布局等。

THE END
0.“层次结构”类型SmartArt图形说明Office 中“层次结构”类型的所有 SmartArt 图形布局的完整列表和图片。 使用此选项来快速确定创建哪种“层次结构”类型的 SmartArt。jvzquC41uwvqq{y0okisq|thv0ipo8j/et0qokkeg5.'N:'D3+94.J8'CI&C:*G9'HC'B8'G8+:G.=6/'K8'K6'DD+F7.>G':H.uvftvcxu/.J7';H&DN*G7'HE'J7'G:+BH.G6'G<&;A*:G/gdd<5;f832do>/6;=f/Bf49/h939959:h3gm
1.物理学的“语法”——物理定律的层次结构与物理理论的构建方法|物理定律的层次结构 社会语言学家伯恩斯坦曾将人类获得的知识分为水平知识结构(horizontal knowledge structure)和等级知识结构(hierarchical knowledge structure),图1展示了等级知识结构和水平知识结构的差异[2]。 图1 水平知识结构和金字塔式等级知识结构图示 jvzq<84m0uooc7hqo0io1jwvkerfa?7:;6:16@6a39
2.顾家家居:首次公开发行股票招股说明书股票频道水平较高的品牌企业。在公司所处的中高端软体家具行业,企业之间的竞争已 经从低层次的价格竞争逐渐升级到品牌、网络、质量、服务、管理等的综合能 力竞争。另外,中国巨大的消费市场吸引了国外软体家具厂商进入。市场竞争 的加剧可能导致行业平均利润率的下滑,从而对公司的生产经营带来不利影 响。 虽然近年来软体家具行jvzquC41uvudm7xvqeqtvjw0eqs0pxykeg5KE;5382?3895222885h90ujznn
3.办公自动化论文范文2管理层次结构 2.1系统层次结构 层次结构是一个物理模型,它体现实际机构设置。肇庆电力工业局办公系统是一个整体,其中局本部和各县局分别是一个管理子系统,整个层次结构共分4级,即肇庆电力工业局办公自动化系统、子系统、工作部门、工作人员。 2.2管理层次 jvzquC41yy}/i€~qq0ipo8mcqyko1@859:4ivvq
4.3.29脑科学日报|全球城市化对人类大脑、行为及心理健康的影响Science子刊封面:绘制人类感觉神经元图 2,大脑是否具有“与生俱来的语法意识”? 来源:Life博士 层次语言结构的神经追踪 人类语言之所以独特,是由于它具有无限的组合性质:在语法系统的基础上,较小的语言单元可以组合成较大的语言结构,从而形成语言单元的层次结构。然而,大脑是如何表征这些不同大小的语法结构的呢?近日,jvzq<84yyy4489iqe0ipo8hqpvkov87412:1;87319;3;;:34a714>;529>:0|mvon
5.课例丨如何基于学业质量标准,实现“教学以上的水平层次框架,是根据评价内容制订的不同层次的等级测评框架,不再是简单的根据标准答案进行对或错的评定。在具体的评价中,可以根据等级测评框架,清楚地了解每一个学生分别达到的哪个水平层次,为改进教学指明了方向。比如在表1中,水平1的案例图,学生知道36-8=28,但不能把先算什么、再算什么说清楚,处于算理理jvzquC41yy}/3?80eqs0f‚4ctvodnn4JQH?SX\R273
6.电子政务研究论文通用12篇另外,电子政务数据仓库中对数据不同粒度的集成和综合,更有效地支持了多层次、多种知识的挖掘。4、查询支持 电子政务数据仓库面向决策支持,电子政务数据仓库的体系结构努力保证查询(Query)和分析的实时性。电子政务数据仓库设计成只读方式,用户可以直接访问电子政务数据仓库,挖掘过程可以做到实时交互,使决策者的思维保持jvzquC41yy}/z~jujw4dqv4jcq}fp86545920qyon
7.北票网页设计层级关系图表(网页设计简述层的概念)首先,依次单击“插入”菜单,然后选择插图框中的“SmartArt”。在出现的对话框中,选择“层次结构”,在右边的“组织结构图”中选择竖排或横排的结构图例,双击出现的“文本”,然后填写家谱姓氏、辈份等信息。如果家族人丁兴旺,可以在不同的辈份(行或列)添加多个文本。 jvzq<84dgkvjcx3{knohwojp0et0c{ykenk04l75h7?f0qyon
8.周光礼、耿孟茹:雄安新区高等教育规模与结构的预测——基于高等2.层次结构。图1呈现了北京、上海及粤港澳大湾区的高等教育层次结构。统计显示:①三地专科在校生占比整体呈下降趋势,研究生(硕博)在校生占比不断上升。②各地区本科在校生数占比约五成,高等教育层次结构呈“橄榄球型”。③北京、上海层次结构重心高于粤港澳大湾区。与北京、上海2019年研究生在校生占比高达39.4%、28.7jvzq<84uqg4swl3gfw4dp8nphq523<7153=:0qyo
9.组织结构及其优缺点矩阵结构与传统的层次结构不一致。在这种结构中,员工具有双重报告关系。通常,员工会根据他们的工作职能向某人报告,而另一位领导会根据他们的产品或部门向他们报告。在矩阵组织结构图上,直接下属关系用实线表示,二级下属关系用虚线表示。拥有多个指挥链可以促进平衡的决策和灵活性,由于项目由多个业务部门监督,因此有充足的jvzq<84yyy4489iqe0ipo8hqpvkov87612>3785919;27?626a725;755:<10|mvon