斯坦福 CS448B 13 图布局
· 阅读时间约 9 分钟
TLDR
本文包含我对斯坦福 CS448B(数据可视化)课程的笔记,特别关注第十三讲关于图网络布局的内容。我将讨论树布局、节点-链接图布局、生成树布局、Sugiyama 风格图布局、层次边缘捆绑、力导向布局、备选布局方法、属性驱动布局的重要性及总结。

原文
笔记

树布局
具有层次结构的图
连通图,有 N-1 条边
节点作为父节点和子节点
缩进
线性列表,缩进编码深度

- 项目沿垂直间隔的行排列
- 缩进显示父/子关系
- 通常用于界面
- 宽度/深度争夺空间
- 经常需要滚动
- 可视化大型层次结构:

- 单焦点(手风琴)列表:
在二维空间中分离宽度和深度
一次只关注单一路径
节点-链接图
通过线/曲线连接的节点

- 节点分布在空间中,通过线连接
- 使用二维空间分离宽度和深度
- 空间用于传达层次方向
- 通常朝向权威或一般性
-
基本递归方法
根据叶节点数量重复划分子树空间
树的宽度沿一个维度
深度沿另一个维度
问题:宽度呈指数增长 -
Reingold & Tilford 的更整洁布局
目标:最大化密度和对称性。
最初为二叉树设计,由 Walker 扩展以涵盖一般情况。
Buchheim 等人对这一扩展进行了修正,实现了线性时间算法设计考虑因素:
- 清晰编码深度层级
- 无边交叉
- 同构子树绘制相同
- 保持顺序和对称性
- 紧凑布局(不浪费空间)
算法:

-
初始自下而上(后序)树遍历
- 根据深度设置 y 坐标
- 将 x 坐标初始化为零
-
在每个父节点,合并左右子树
- 将右子树尽可能靠近左侧移动
- 通过维护子树轮廓高效计算
- 使父节点居中于子节点之上
- 记录右子树位置偏移的"移位"
-
最终自上而下(前序)遍历设置 x 坐标
- 累加移位总和
径向布局
- 极坐标系中的节点-链接图
- 半径编码深度,根位于中心
- 角度扇区分配给子树(递归方法)
- 这里也可以应用 Reingold-Tilford 方法

节点-链接图的问题:
规模
- 树的宽度通常呈指数增长
- 即使使用更整洁的布局,也很快用完空间
可能的解决方案
- 过滤
- 焦点+上下文
- 滚动或平移
- 缩放
- 聚合
双曲布局
在双曲空间中布局,然后投影到欧几里得平面
为什么?与树的宽度类似,双曲平面呈指数扩展
也可以在 3D 中计算,投影到球体

Degree-of-Interest 树
空间受限的多焦点树布局
在每个块的基础上剔除"不感兴趣"的节点,直到一个层级上的所有块都适合边界
使子块在父节点下居中
封闭图
通过封闭表示层次结构

使用空间封闭编码结构
俗称树形图