3

我想知道是否可以稍微改变 d3.layout 中的打包算法。即,我想知道是否可以将其放在它的中间,而不是将具有最高值的子节点放在它与父节点接触的位置。现在看起来所有的孩子都是螺旋式的,最小的孩子在父母的深处。

我希望它不会太混乱。我很乐意澄清任何不清楚的地方。

4

2 回答 2

4

有可能的。

您只需要在 d3.js 中替换此代码:

  function d3_layout_packSort(a, b) {
    return a.value - b.value;
  }

使用此代码:

  function d3_layout_packSort(a, b) {
    return -(a.value - b.value);
  }

(只是符号的变化)

最大的圆圈不会位于父级的中心,但它们往往会靠近中心。我的理解是,您不需要将确切的位置放在中心,只是近似的,所以我希望这能满足您的想法。

下图并排展示了使用常规和修改后的 d3.js 获得的圆形包示例:

常规和改良包装

我有一种更喜欢改良包装的倾向。:) 所以我想这是个好主意。检查它与您的数据的外观。

您可以在此处访问这些示例:常规修改

我修改后的 d3.js 在这里

如果您还有其他问题,请告诉我。

于 2013-12-25T19:29:49.613 回答
0

D3 是开源的,因此您可以对它进行任何您喜欢的修改。对于包装布局,将元素放置在包含形状的中心可能需要进行大量修改,因为这样做会进一步限制可用空间。

也就是说,一个圆在边缘的剩余空间,直到另一个边缘可以用于其他圆。如果圆在中心,则到边缘的空间更小,因此圆的空间也更小。为了保持大小和数据之间的视觉相关性,中心的圆圈必须更小,依此类推。

所以你说的不是简单的修改,而是实现算法的改变。根据您想要做什么,使用 D3 的另一个布局可能更容易实现这一点。

于 2013-12-23T10:31:07.447 回答