这一篇博客主要讲一下整个图布局的历史进程,想要用大白话去总结一下图布局的前世今生。

1、Eades-悉尼大学

1984-A heuristic for graph drawing,这篇论文在1984年发表,力引导模型的开山鼻祖,从此之后开启了一个图布局的新纪元。我在网上搜索到这篇文章都只有扫描版,年代感一下子就起来了。从1984年到现在的2021年,这个教授搞图布局搞了快40多年了,今年在也pVis上发表了有关于力引导图布局的算法。

在这篇论文里首次提到了弹簧布局模型,后面统称为Eades弹簧模型:相当于把布局当成一个弹簧系统,把节点之间的连边当成弹簧,如果两个节点之间的连边太短(弹簧会被压的太紧)就会产生斥力,如果两个节点之间的连边太长(弹簧被拉的太长)就会产生吸引力。当这个弹簧系统稳定的时候,布局也就出来了,这个模型在定义的时候参考了弹簧的胡克定律,弹簧力也是一种“力的作用”。

android关系图实现 关系图布局算法_d3

2012-Spring Embedders and Force Directed Graph Drawing Algorithms,想要深入了解弹簧模型可以参考这篇论文。Spring Embedder这两个词的意思就是将弹簧力嵌入到布局算法中。虽然灵感来源是弹簧力(胡克定律),但是在实际计算力的时候并没有严格遵守胡克定律,而是自定义的一个力的作用。引力和斥力都利用同样一个公式来计算,因为最初是由弹簧产生的灵感,所以后来被称作Eades弹簧模型。

2、Fruchterman and Reingold

一提到图布局算法,大家可能都听说过力引导。有些人对英语比较敏感,可能也听说过FR,然后自然而言会把这两个东西联系在一起=>力引导=Force Directed(FR). 但是我们通常听到的FR,其实不是指Force Directed,而是指Fruchterman and Reingold。

  1. Force Directed:力引导模型,单从名字上来看,只在对布局的计算过程中,利用了物理上定义的“力”。
  2. Fruchterman and Reingold:这是两个人名,他们两个人设计了一个布局算法,为了公平起见,以两个人命名,叫做FR。[1]

这种借用了物理“力”的概念的布局算法,都统称为基于力引导模型的布局算法,所以FR算法也是一种力引导布局算法。

这两个人非常厉害,受到Eades弹簧模型的启发,写出了一个自动的布局算法,也就是我们俗称的FR。和这个布局算法使用弹簧引力和库伦斥力,引力和斥力都有自己的计算公式,具体可以参考文献[1]。

  • 引力:有连边的两个节点受弹簧的引力。
  • 斥力:每个节点为一个粒子,任意两个粒子之间受库伦斥力。

[1]T. M. J. Fruchterman and E. M. Reingold. Graph drawing by force-directed placement. Softw. Pract. Exper., 21(11):1129–1164, 1991.


其实后面还有很多要说的,但是心情不好,不想说了,等我心情好的时候再说吧。