树图
🌐 Treemap
示例 · 由 Ben Shneiderman 在 1991 年提出,树形图根据每个节点的相关值递归地将区域细分为矩形。D3 的树形图实现支持可扩展的 铺砖方法:默认的 平方化 方法旨在生成具有 黄金 宽高比的矩形;这比 切片与切块 的可读性和尺寸估算更好,后者仅在深度上交替进行水平和垂直细分。
treemap()
来源 · 使用默认设置创建一个新的树状图布局。
树状图(根)
🌐 treemap(root)
来源 · 列出指定的 根 层级,在 根 及其子代上分配以下属性:
- node.x0 - 矩形的左边缘
- node.y0 - 矩形的上边缘
- node.x1 - 矩形的右边缘
- node.y1 - 矩形的底边
在将层级结构传递给树状图布局之前,你必须调用 root.sum。你可能还想调用 root.sort 来在计算布局之前对层级结构进行排序。
🌐 You must call root.sum before passing the hierarchy to the treemap layout. You probably also want to call root.sort to order the hierarchy before computing the layout.
treemap.tile(tile)
来源 · 如果指定了 tile,则将 平铺方法 设置为指定的函数,并返回此树图布局。如果未指定 tile,则返回当前的平铺方法,默认使用黄金比例的 treemapSquarify。
treemap.size(size)
来源 · 如果指定了 size,将此树图布局的大小设置为指定的两个元素的数字数组 [width, height] 并返回此树图布局。如果未指定 size,则返回当前大小,默认值为 [1, 1]。
treemap.round(round)
来源 · 如果指定了 round,则根据给定的布尔值启用或禁用四舍五入,并返回此树形图布局。如果未指定 round,则返回当前的四舍五入状态,默认值为 false。
treemap.padding(padding)
来源 · 如果指定了 padding,则将 内边距 和 外边距 设置为指定的数字或函数,并返回此树图布局。如果未指定 padding,则返回当前的内边距函数。
treemap.paddingInner(padding)
来源 · 如果指定了 padding,则将内部填充设置为指定的数字或函数,并返回此树图布局。如果未指定 padding,则返回当前的内部填充函数,默认值为常数零。如果 padding 是一个函数,则对于每个具有子节点的节点都会调用该函数,并将当前节点作为参数传入。内部填充用于分隔节点的相邻子节点。
treemap.paddingOuter(padding)
来源 · 如果指定了padding,则将top、right、bottom和left的内边距设置为指定的数字或函数,并返回此树图布局。如果未指定padding,则返回当前的顶部内边距函数。
treemap.paddingTop(padding)
来源 · 如果指定了 padding,则将顶部填充设置为指定的数字或函数,并返回该树状图布局。如果未指定 padding,则返回当前的顶部填充函数,默认值为常数零。如果 padding 是一个函数,则会针对每个具有子节点的节点调用该函数,并传入当前节点。顶部填充用于将节点的顶边与其子节点分开。
treemap.paddingRight(padding)
来源 · 如果指定了 padding,则将右边距设置为指定的数值或函数,并返回此树图布局。如果未指定 padding,则返回当前的右边距函数,默认为常数零。如果 padding 是一个函数,则会针对每个具有子节点的节点调用该函数,并传入当前节点。右边距用于将节点的右边缘与其子节点分开。
treemap.paddingBottom(padding)
来源 · 如果指定了 padding,则将底部内边距设置为指定的数值或函数,并返回该树状图布局。如果未指定 padding,则返回当前的底部内边距函数,默认为常数零。如果 padding 是一个函数,则对于每个有子节点的节点都会调用它,并传入当前节点。底部内边距用于将节点的底边与其子节点分开。
treemap.paddingLeft(padding)
来源 · 如果指定了 padding,则将左边距设置为指定的数字或函数,并返回该树状图布局。如果未指定 padding,则返回当前的左边距函数,默认为常数零。如果 padding 是一个函数,则对每个有子节点的节点调用该函数,并传入当前节点。左边距用于将节点的左边缘与其子节点分开。
树形图平铺
🌐 Treemap tiling
提供了几种内置的平铺方法,可用于 treemap.tile。
🌐 Several built-in tiling methods are provided for use with treemap.tile.
treemapBinary(node, x0, y0, x1, y1)
来源 · 递归地将指定的节点划分为一个近似平衡的二叉树,对于宽矩形选择水平划分,对于高矩形选择垂直划分。
treemapDice(node, x0, y0, x1, y1)
来源 · 根据每个指定 node 的子节点的值将所指定的矩形区域 x0, y0, x1, y1 水平划分。子节点按顺序排列,从给定矩形的左边缘 (x0) 开始。如果子节点的值之和小于指定 node 的值(即,如果指定的 node 有非零内部值),剩余的空白区域将位于给定矩形的右边缘 (x1)。
treemapSlice(node, x0, y0, x1, y1)
来源 · 根据每个指定 node 的子节点的值将所指定的矩形区域 x0, y0, x1, y1 进行垂直划分。子节点按顺序排列,从给定矩形的上边缘 (y0) 开始。如果子节点值的总和小于指定 node 的值(即,如果指定的 node 有非零的内部值),剩余的空白空间将位于给定矩形的下边缘 (y1)。
treemapSliceDice(节点, x0, y0, x1, y1)
🌐 treemapSliceDice(node, x0, y0, x1, y1)
来源 · 如果指定的 节点 深度为奇数,则委托给 treemapSlice;否则委托给 treemapDice。
treemapSquarify(node, x0, y0, x1, y1)
来源 · 实现了 Bruls 等人提出的 方形树图 算法,该算法旨在生成具有特定 长宽比 的矩形。
treemapResquarify(node, x0, y0, x1, y1)
示例 · 来源 · 类似 treemapSquarify,但会保留之前由 d3.treemapResquarify 计算的布局的拓扑结构(节点相邻关系),前提是存在该布局且使用了相同的 目标长宽比。这种平铺方法对于动画显示树状图更新非常好,因为它只改变节点大小,而不改变它们的相对位置,从而避免了分散注意力的移动和遮挡。然而,稳定更新的缺点是对后续更新的布局可能不够优化:只有第一次布局使用了 Bruls 等人的方形化算法。
squarify.ratio(ratio)
来源 · 指定生成矩形所需的宽高比。ratio 必须指定为大于或等于一的数字。请注意,生成矩形的方向(高或宽)并不由该比率决定;例如,比率为二时,将尝试生成宽高比为 2:1 或 1:2 的矩形混合物。(然而,你可以通过在不同尺寸下生成正方形树状图,然后拉伸树状图 到所需宽高比来近似实现此结果。)此外,指定的 ratio 仅是对平铺算法的提示;矩形并不保证具有指定的宽高比。如果未指定,宽高比默认为黄金比例 φ = (1 + sqrt(5)) / 2,根据 Kong 等 的研究。