跳至内容

打包

Circle-Packing

示例 · 包含图使用包含(嵌套)来表示层次结构。叶圆的大小编码了数据的定量维度。包含圆显示了每个子树的近似累积大小,但由于空间浪费,存在一些失真;只有叶节点可以准确比较。虽然 圆形打包 的空间利用效率不如 树状图,但“浪费”的空间更突出地揭示了层次结构。

pack()

源代码 · 使用默认设置创建一个新的打包布局。

pack(root)

源代码 · 布置指定的 root 层次结构,在 root 及其后代上分配以下属性

  • node.x - 圆心点的 x 坐标
  • node.y - 圆心点的 y 坐标
  • node.r - 圆的半径

您必须在将层次结构传递给打包布局之前调用 root.sum。您可能还想调用 root.sort 以在计算布局之前对层次结构进行排序。

pack.radius(radius)

源代码 · 如果指定了 radius,则将打包布局的半径访问器设置为指定的函数,并返回此打包布局。如果未指定 radius,则返回当前半径访问器,其默认值为 null。如果半径访问器为 null,则每个叶圆的半径将从叶 node.value(由 node.sum 计算)派生;然后,半径将按比例缩放以适合 布局大小。如果半径访问器不为 null,则每个叶圆的半径由函数精确指定。

pack.size(size)

源代码 · 如果指定了 size,则将此打包布局的大小设置为指定的包含两个元素的数字数组 [width, height],并返回此打包布局。如果未指定 size,则返回当前大小,其默认值为 [1, 1]。

pack.padding(padding)

源代码 · 如果指定了 padding,则将此打包布局的填充访问器设置为指定的数字或函数,并返回此打包布局。如果未指定 padding,则返回当前填充访问器,其默认值为常数零。当兄弟节点打包时,相切的兄弟节点将被大约指定的填充隔开;包含父圆也将被大约指定的填充与子节点隔开。如果未指定 显式半径,则填充是近似的,因为需要两遍算法才能适应 布局大小:首先在没有填充的情况下打包圆;计算并应用于指定填充的缩放因子;最后,用填充重新打包圆。

packSiblings(circles)

源代码 · 打包指定的 circles 数组,每个圆都必须有一个 circle.r 属性来指定圆的半径。为每个圆分配以下属性

  • circle.x - 圆心点的 x 坐标
  • circle.y - 圆心点的 y 坐标

圆根据 Wang et al. 的前链打包算法进行定位。

packEnclose(circles)

示例 · 源代码 · 计算包含指定 circles 数组的 最小圆,每个圆都必须有一个 circle.r 属性来指定圆的半径,以及 circle.x 和 circle.y 属性来指定圆的中心。包含圆使用 Matoušek-Sharir-Welzl 算法 计算。(另见 阿波罗尼奥斯问题。)