D3 Sunburst弧形尺寸

时间:2017-01-14 11:24:43

标签: javascript d3.js

我正在尝试基于此示例创建D3旭日形图:

https://bl.ocks.org/maybelinot/5552606564ef37b5de7e47ed2b7dc099

我希望创建的弧可以关闭整个圆圈,但它们不会。

出于测试目的和简洁性,相同深度中每个元素大小的总和等于360。

跟随我的jsFiddle:

https://jsfiddle.net/igasparetto/uz8rz13d/

有些东西告诉我问题出在这些方面:

var partition = d3.partition();

var arc = d3.arc()
.startAngle(function(d) { return Math.max(0, Math.min(2 * Math.PI, x(d.x0))); })
.endAngle(function(d) { return Math.max(0, Math.min(2 * Math.PI, x(d.x1))); })
.innerRadius(function(d) { return Math.max(0, y(d.y0)); })
.outerRadius(function(d) { return Math.max(0, y(d.y1)); });

谢谢

1 个答案:

答案 0 :(得分:5)

当您执行root.sum来创建值时,您的问题似乎是包含为父节点定义的大小变量。基本上,父值不仅设置为其子项的总和,而且还将父项大小添加为"自由空间"

https://github.com/d3/d3-hierarchy/blob/master/README.md#node_sum

"每个节点的node.value属性设置为指定函数返回的数值加上所有后代的组合值。"

这可以忽略非叶子节点大小值:

  root.sum(function(d) { return !d.children || d.children.length === 0 ? d.size :0; });

https://jsfiddle.net/uz8rz13d/2/