力导布局图是一种用来呈现复杂关系网络的图表。在力导布局图中,系统中的每个节点都可以看成是一个放电粒子,粒子间存在某种斥力。同时,这些粒子间被它们之间的“边”所牵连,从而产生引力。系统中的粒子在斥力和引力的作用下,从随机无序的初态不断发生位移,逐渐趋于平衡有序的终态。这就是对力导布局图的直白解释。
物理与可视化也可以擦出火花
力导向图(Force-Directed Graph),又叫力学图、力导向布局图,是绘图的一种算法。图如其名,力导向图是建立在力学模型基础上的一种特殊的图表。
力导向图通常在二维或三维空间里配置节点,节点之间用线连接。各连线的长度几乎相等,且尽可能不相交。节点和连线都被施加了力的作用,力是根据节点和连线的相对位置计算的。根据力的作用,来计算节点和连线的运动轨迹,并不断降低它们的能量,最终达到一种能量很低的安定状态。
也许你对力导向图倍感陌生,但你一定听过“社交网络”。事实上,许多关系网络都是通过力导向图进行可视化的。力引导图可以完成很好的聚类,方便用户看出点之间的亲疏关系。比如下图是根据某用户Facebook与其它用户交流的情况绘制的力导向图,从图中可以看出与其关系更紧密的用户主要集中在右上角,经辨认多为她目前的同事和好友。
这种听起来有点复杂的图表其实绘制原理很简单,其布局是模拟弹簧电荷模型在每两个节点之间添加一个斥力,每条边的两个节点之间添加一个引力,简单来讲,就是让任意两点之间都存在斥力,可以使它们不会相距太近;同时让有关系的点之间存在引力,可以使它们不会相距太远。
这种力引导布局最早由Peter Dades在1984年的“启发式画图算法”文章中提出,目的是减少布局中边的交叉,尽量保持边长一致。其中主要引入了库伦斥力和胡克弹力,考虑阻尼衰减(这就是为什么我们拉动力导向图,它能很快稳定回来的原因)。
一图在手,关系网络全都有
力导向图能表示节点之间的多对多的关系,主要应用于复杂网络可视化(Network Visualisation)。由于力引导布局的结果有良好的对称性和局部聚合性,也比较美观,我们也常常用来模拟人物关系等。
案例1:抽象派大师的关系网络
纽约现代艺术馆(MoMA)根据抽象派大师们之间的熟识关系,制作了上面的力导布局图。每个节点代表一个抽象派艺术家,连线表示两个艺术家互相认识。人脉最广的艺术家,也就是连接最多的节点。可以从这个关系网中看出比较有影响力的艺术家,也可以看到艺术家之间联系比较紧密的小圈子。
点击节点“Pablo Picasso”,还可以进一步查看著名艺术家毕加索的关系网络。
案例2:星战人物关系图
案例3:莎士比亚悲剧人物关系图
上图中每一个小图都对应了莎士比亚的一个悲剧作品,小图下方的数据分别是节点数(左)和网络密度(右)。如果两个角色出现在同一场景中,则连接两个角色。节点大小和颜色强度与其加权程度成正比。多个力导向图对比来看,我们可以发现最长的悲剧《哈姆雷特》并不是结构最复杂的,其密度比《李尔王》和《奥赛罗》小。
注:上图中“网络密度”用于度量图表完成的距离。一个完整的图(100%)在其节点之间具有所有可能的边。密度越大,该悲剧中人物之间的关系越复杂。
除了人物关系,力导向图当然也可以展示其它的关系网络,比如网站链接网络等。
不会写代码,力导向图也能轻松做!
通过前面的了解,我们可以总结,力导布局图可设置的参数主要有:
①引力/斥力:当节点过于聚拢或过于分开时,可以通过调整斥力或引力来使节点分开或聚拢。
②边(连线)的权重:节点之间吸引力的强度可以对于所有节点都相同,也可以基于边的权重而不同。当节点间吸引力基于边的权重而不同时,边的权重越大,节点间吸引力就会越大,节点就会越聚拢。
力导布局图绘制时可以赋予边的权重。连线无权重的力导布局图可以看作是树图在力导布局下的一种状态体现,主要展示层级关系,并优化布局。
这种兼具灵活性和直观性的图看上去比较复杂,数据量也比较大,即使是强大的EXCEL目前也没有办法自动生成,而很多编程工具对大多数编程小白来说又太难了。而镝数是实现力导布局图的好工具,提供无需编程的标准力矩图模板,将数据复制粘贴即可自动生成!
在镝数上制作一张力导向图需要准备两张数据表。第一张表为点表,罗列所有的关系点;其中第1列为点的名称,第2列为点的权重值。
第二张表为边表,罗列所有连接关系点的边;其中第1列为边的起始点(父节点),第2列为边的终止点(子节点)。
通过对数据进行简单的处理,一张绚丽的力导向图就做好了!随意拖动图上的节点(等同给节点施加力),你会发现节点运动过后迅速又被拉扯到某个位置,从而保持平衡稳定的状态。
好了,今天的力导向图分享就到这里,赶紧登陆镝数www.dydata.io试试吧!
别再说找不到数据资源了,这里有你想要的全行业热门数据,万份行业报告共享群限时招募
添加小镝同学(威星:xiaoditongxue520),入群即可领取50+行业报告!