树
示例 · 树形布局使用 Reingold–Tilford “tidy” 算法 生成整洁的树状节点连接图,并由 Buchheim et al. 改进为线性时间运行。整洁树通常比 树状图 更紧凑。
tree()
源代码 · 创建具有默认设置的新树形布局。
tree(root)
源代码 · 布置指定的 root 层次结构,在 root 及其后代上分配以下属性
- node.x - 节点的 x 坐标
- node.y - 节点的 y 坐标
坐标 x 和 y 代表任意坐标系;例如,您可以将 x 视为角度,将 y 视为半径以生成 径向布局。您可能希望在将层次结构传递给树形布局之前调用 root.sort。
tree.size(size)
源代码 · 如果指定了 size,则将此树形布局的大小设置为指定的包含两个数字的数组 [width, height],并返回此树形布局。如果未指定 size,则返回当前布局大小,默认为 [1, 1]。布局大小为 null 表示将使用 节点大小。坐标 x 和 y 代表任意坐标系;例如,要生成 径向布局,大小为 [360, radius] 对应于 360° 的宽度和 radius 的深度。
tree.nodeSize(size)
源代码 · 如果指定了 size,则将此树形布局的节点大小设置为指定的包含两个数字的数组 [width, height],并返回此树形布局。如果未指定 size,则返回当前节点大小,默认为 null。节点大小为 null 表示将使用 布局大小。当指定节点大小时,根节点始终位于 ⟨0, 0⟩。
tree.separation(separation)
源代码 · 如果指定了 separation,则将分离访问器设置为指定的函数并返回此树形布局。如果未指定 separation,则返回当前分离访问器,默认为
function separation(a, b) {
return a.parent == b.parent ? 1 : 2;
}
更适合径向布局的变体根据半径按比例减少分离间隙
function separation(a, b) {
return (a.parent == b.parent ? 1 : 2) / a.depth;
}
分离访问器用于分离相邻节点。分离函数传递两个节点 a 和 b,并且必须返回所需的间距。节点通常是兄弟节点,但如果布局决定将这些节点放置在相邻位置,则节点可能存在更远的亲缘关系。