利 用相邻矩阵的方法,能大大减少节点的数量,从而降低视觉复杂度。而另一种减少视觉复杂度的方法是减少节点间连线的复杂度。这种方法的代表是由Danny Holten 在 IEEE InfoVis 2006 会议上提出层次连接线束(Hierarchical Edge Bundles)的方法【1】。

这种方法针对的数据类型其实是层次数据,它们往往可以表示成树的形式,像上面的图 (a) 中绿色的部分。但是除了层次关系外,数据还包含了连接关系,像上面的图 (a) 蓝色的连线。用户感兴趣的主要是节点间的连接关系。对于给定的两个节点,Danny的方法先找出树的中连接这两个节点的边,像上面的图 (b) 中橙色的部分,然后用这些边生成样条曲线(Spline Curve),象图(b)中蓝色的曲线。这种方法的好处的是,虽然连接线的数量没有变化,但是由于采用样条曲线,相邻节点间的连线的形状会很相似,这样就 大大减少了视觉复杂度,像上面的图(c) 中几条蓝色的曲线。不好的地方是,有些线可能会重合在一起,搞不清楚谁跟谁有连接关系,而造成歧义。为了解决这个问题,Danny的方法允许用户调整参数 来控制样条曲线间的间距,而同时保持曲线的形状大致不变,这样就能得到图(d)的效果。

上 面的图显示了一个实际使用层次连接线束的例子。图(a) 显示了节点连接图,视觉复杂度比较大;图 (b) 用树图显示了节点间的层次关系;图(c)显示了层次连接线束的结果:由于相似形状的连接线集中在一起构成线束,视觉复杂度就被大大降低了,而节点间的连接 关系,就显得很清楚了。

层 次连接线束的方法需要用到层次关系来构造树的结构,用树图中的边当骨架来生成样条曲线。但是对于实际中很多网络数据,往往很难定义层次关系;即使能定义层 次关系,层次关系的计算构造也很复杂。怎么把层次连接线束的思路用在一般的网络数据呢?Danny同志在EuroVis 2009会议上提出了FDEB (Force-Directed Edge Bundling) 的方法。对于一般的节点连接图,这种方法先把每条连线分成几个小段,每段之间引入一个新的节点,像上面图 (a) 显示。对于相邻的两条边,像我们前面介绍的弹簧模型一样,我们假想新的节点(同条线和不同线)间有个小弹簧,像上面图 (b)显示那样。为了让结果更好,弹簧的力量跟线之间的位置有关系。比如越相互垂直的两条线,就越不应该放在同一个线束里,所以它们俩之间的弹簧收缩力量 就应该弱一点,相隔越远的两条线之间也类似;而在越相互靠近并且越平行的线之间,弹簧收缩力量就应该强一点。然后我们就把这团东西往桌上一扔,让它自己弹 啊弹,直到弹不动为止。这样的话我们就可以得到类似于连接线束的结果。下面的图显示了美国的飞机的航线图。图(a)显示了原来的节点连接图,图(b)显示 了用FDEB生成的结果。图(b) 明显比图(a)能更清楚的显示一些有趣的东西,比如,哪些城市间的航线比较繁忙,哪些城市是主要的中转站,等等。

当然这俩种只是代表性的技术。Hierarchical Edge Bundles 从2006年发表到现在已经有超过150个引用了,所以如果感兴趣的话,可以从引用它们的论文,顺藤摸瓜,找到其它有趣的显示网络数据的方法。

【1】 Danny Holten. Hierarchical Edge Bundles: Visualization of Adjacency Relations in Hierarchical Data. IEEE TRANSACTIONS ON VISUALIZATION AND COMPUTER GRAPHICS, VOL. 12, NO. 5, SEPTEMBER/OCTOBER 2006

【2】 Danny Holten and Jarke J. van Wijk. Force-Directed Edge Bundling for Graph visualization.  Eurographics/ IEEE-VGTC Symposium on Visualization 2009, Volume 28 (2009), Number 3

© 2010, 视物 | 致知. All rights reserved.

Related Posts: