我想知道是否可以稍微改变 d3.layout 中的打包算法。即,我想知道是否可以将其放在它的中间,而不是将具有最高值的子节点放在它与父节点接触的位置。现在看起来所有的孩子都是螺旋式的,最小的孩子在父母的深处。
我希望它不会太混乱。我很乐意澄清任何不清楚的地方。
我想知道是否可以稍微改变 d3.layout 中的打包算法。即,我想知道是否可以将其放在它的中间,而不是将具有最高值的子节点放在它与父节点接触的位置。现在看起来所有的孩子都是螺旋式的,最小的孩子在父母的深处。
我希望它不会太混乱。我很乐意澄清任何不清楚的地方。
有可能的。
您只需要在 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 在这里。
如果您还有其他问题,请告诉我。
D3 是开源的,因此您可以对它进行任何您喜欢的修改。对于包装布局,将元素放置在包含形状的中心可能需要进行大量修改,因为这样做会进一步限制可用空间。
也就是说,一个圆在边缘的剩余空间,直到另一个边缘可以用于其他圆。如果圆在中心,则到边缘的空间更小,因此圆的空间也更小。为了保持大小和数据之间的视觉相关性,中心的圆圈必须更小,依此类推。
所以你说的不是简单的修改,而是实现算法的改变。根据您想要做什么,使用 D3 的另一个布局可能更容易实现这一点。