网络分析流程与 NetworkX 实践08 / 16
布局算法
网络图的节点坐标不是数据,而是布局算法为了满足某种美学或几何目标计算出来的。理解各类布局优化的是什么,才能判断图中看到的“簇”“中心”有多少来自数据、多少来自算法。
力导向布局
把边看作弹簧、节点之间存在斥力,求系统的低能量状态。
- Fruchterman–Reingold(1991,NetworkX 的
spring_layout):相连节点之间的吸引力随距离平方增长,所有节点对之间的斥力与距离成反比,并用逐渐降低的“温度”限制每步位移,逐步冷却到稳定状态。结果通常比较均匀,社团往往呈现为团块。 - Kamada–Kawai(1989):让图上两点的欧氏距离尽量接近它们的最短路径距离,能量是所有节点对“距离误差”的加权平方和。对中小网络,它对图距离的保真度通常较好,但需要全部节点对最短路径,难以用于大网络。
- ForceAtlas2(Jacomy 等 2014,Gephi
的主力布局,NetworkX 3.4 起提供
forceatlas2_layout):斥力与两端节点的“度加 1”之积成正比,枢纽之间被推开,低度节点贴近其枢纽;可选 LinLog 模式加强社团分离,并可用 Barnes–Hut 近似把每步斥力计算从 降到约 ,适合较大网络的交互探索。
力导向布局有随机初值,结果依赖种子与迭代次数;节点之间的距离只在局部上有意义,不同簇之间的远近与相对位置往往没有可解释的含义。
谱布局
用拉普拉斯矩阵
的第二、第三小特征值对应的特征向量作为二维坐标(Hall 1970
的二次布局思想;NetworkX 的
spectral_layout)。它最小化相连节点之间的距离平方和,结果不依赖随机种子,对社团结构敏感,在代码示例中“同模块与异模块平均距离之比”最小。缺点是节点容易大量重叠、分布很不均匀,常作为力导向布局的初值。
层次与分层布局
- Sugiyama
型层次布局(1981):先把节点分配到若干层,再最小化相邻层之间的边交叉,最后确定坐标。适合有向无环或近似无环的网络,如转录调控级联、信号通路、细胞分化谱系。Graphviz
的
dot程序实现了这一类布局。 - 按属性分层(NetworkX 的
multipartite_layout、bipartite_layout):按节点类型(药物 / 靶点 / 疾病)或属性分列排列,结构上的距离不再体现,但类型之间的连接模式一目了然。代码示例中,按模块分列的布局对图距离几乎没有保真度(秩相关约 0.03),这是它的设计目的使然。 - Hive plot(Krzywinski 等 2012):按规则把节点放在几条径向轴上,位置由节点属性决定而不是由优化决定,因此不同网络之间可以直接比较。
布局质量可以定量检查
代码示例“布局算法比较”在一个含 4 个植入模块的随机分块网络上比较五种布局,用“节点对的图距离与欧氏距离的 Spearman 秩相关”衡量对距离的保真程度,用“同模块与异模块节点对的平均欧氏距离之比”衡量模块的视觉分离程度。在该网络上,Kamada–Kawai 的距离保真度最高(),谱布局与 ForceAtlas2 的模块分离最明显(距离比约 0.17 与 0.25)。没有一种布局在所有目标上都最好;选择布局应服务于图要传达的那个结论。