生物医学网络科学Biomedical Network Science
网络分析流程与 NetworkX 实践08 / 16

布局算法

阅读
约 3 分钟

网络图的节点坐标不是数据,而是布局算法为了满足某种美学或几何目标计算出来的。理解各类布局优化的是什么,才能判断图中看到的“簇”“中心”有多少来自数据、多少来自算法。

力导向布局

把边看作弹簧、节点之间存在斥力,求系统的低能量状态。

  • Fruchterman–Reingold(1991,NetworkX 的 spring_layout):相连节点之间的吸引力随距离平方增长,所有节点对之间的斥力与距离成反比,并用逐渐降低的“温度”限制每步位移,逐步冷却到稳定状态。结果通常比较均匀,社团往往呈现为团块。
  • Kamada–Kawai(1989):让图上两点的欧氏距离尽量接近它们的最短路径距离,能量是所有节点对“距离误差”的加权平方和。对中小网络,它对图距离的保真度通常较好,但需要全部节点对最短路径,难以用于大网络。
  • ForceAtlas2(Jacomy 等 2014,Gephi 的主力布局,NetworkX 3.4 起提供 forceatlas2_layout):斥力与两端节点的“度加 1”之积成正比,枢纽之间被推开,低度节点贴近其枢纽;可选 LinLog 模式加强社团分离,并可用 Barnes–Hut 近似把每步斥力计算从 O(N2)O(N^2) 降到约 O(Nlog⁡N)O(N\log N),适合较大网络的交互探索。

力导向布局有随机初值,结果依赖种子与迭代次数;节点之间的距离只在局部上有意义,不同簇之间的远近与相对位置往往没有可解释的含义。

谱布局

用拉普拉斯矩阵 L=D−AL=D-A 的第二、第三小特征值对应的特征向量作为二维坐标(Hall 1970 的二次布局思想;NetworkX 的 spectral_layout)。它最小化相连节点之间的距离平方和,结果不依赖随机种子,对社团结构敏感,在代码示例中“同模块与异模块平均距离之比”最小。缺点是节点容易大量重叠、分布很不均匀,常作为力导向布局的初值。

层次与分层布局

  • Sugiyama 型层次布局(1981):先把节点分配到若干层,再最小化相邻层之间的边交叉,最后确定坐标。适合有向无环或近似无环的网络,如转录调控级联、信号通路、细胞分化谱系。Graphviz 的 dot 程序实现了这一类布局。
  • 按属性分层(NetworkX 的 multipartite_layout、bipartite_layout):按节点类型(药物 / 靶点 / 疾病)或属性分列排列,结构上的距离不再体现,但类型之间的连接模式一目了然。代码示例中,按模块分列的布局对图距离几乎没有保真度(秩相关约 0.03),这是它的设计目的使然。
  • Hive plot(Krzywinski 等 2012):按规则把节点放在几条径向轴上,位置由节点属性决定而不是由优化决定,因此不同网络之间可以直接比较。

布局质量可以定量检查

代码示例“布局算法比较”在一个含 4 个植入模块的随机分块网络上比较五种布局,用“节点对的图距离与欧氏距离的 Spearman 秩相关”衡量对距离的保真程度,用“同模块与异模块节点对的平均欧氏距离之比”衡量模块的视觉分离程度。在该网络上,Kamada–Kawai 的距离保真度最高(ρ≈0.76\rho\approx0.76),谱布局与 ForceAtlas2 的模块分离最明显(距离比约 0.17 与 0.25)。没有一种布局在所有目标上都最好;选择布局应服务于图要传达的那个结论。