Javascript D3 sunburst第二层不';t占据第一层的全部宽度

Javascript D3 sunburst第二层不';t占据第一层的全部宽度,javascript,d3.js,Javascript,D3.js,我正在做一个D3太阳暴击图,内层是第一个类别,外层是第一个类别的子类别。例如,在我的数据中,我想表明,在所有样本中,67%未经验证,33%已验证,在已验证类别中,51%非法,49%不合法,在未经验证类别中,36%为低风险,20%为中风险,44%为高风险。我希望第二层占据第一层中它们所属类别的全部宽度,但事实并非如此,我得到了以下结果 这是我的代码,有人能告诉我如何得到我想要的结果的正确方向吗?多谢各位 var nodeData={ “名称”:“类别”, “儿童”:[{ “名称”:“已验证”,

我正在做一个D3太阳暴击图,内层是第一个类别,外层是第一个类别的子类别。例如,在我的数据中,我想表明,在所有样本中,67%未经验证,33%已验证,在已验证类别中,51%非法,49%不合法,在未经验证类别中,36%为低风险,20%为中风险,44%为高风险。我希望第二层占据第一层中它们所属类别的全部宽度,但事实并非如此,我得到了以下结果

这是我的代码,有人能告诉我如何得到我想要的结果的正确方向吗?多谢各位

var nodeData={
“名称”:“类别”,
“儿童”:[{
“名称”:“已验证”,
“尺寸”:33,
“儿童”:[{
“名称”:“非法”,
“尺寸”:51
}, {
“名称”:“合法”,
“尺寸”:49
}]
}, {
“名称”:“未验证”,
“尺寸”:67,
“儿童”:[{
“名称”:“低风险”,
“尺寸”:36
}, {
“名称”:“中等风险”,
“尺寸”:20
}, {
“名称”:“高风险”,
“尺寸”:44
}]
}]
};
var宽度=500;
var高度=500;
变量半径=数学最小值(宽度、高度)/2;
var color=d3.scaleOrdinal(d3.schemeCategory20b);
var g=d3.select('svg')
.attr('width',width)
.attr('height',height)
.append('g')
.attr('transform','translate('+width/2+','+height/2+'));
var partition=d3.partition()
.尺寸([2*Math.PI,半径]);
var root=d3.层次结构(nodeData)
.sum(函数(d){
返回d.size
});
分区(根);
var arc=d3.arc()
.startAngle(功能(d){
返回d.x0
})
.端角(功能(d){
返回d.x1
})
.内半径(功能(d){
返回d.y0
})
.外层(功能(d){
返回d.y1
});
g、 选择全部('路径')
.data(根目录下的子目录())
.输入()
.append('路径')
.attr(“显示”,功能(d){
返回d.depth?空:“无”;
})
.attr(“d”,弧)
.style('stroke','#fff')
.样式(“填充”,功能(d){
返回颜色((d.children?d:d.parent).data.name);
});

您应该只为孩子们准备尺寸。儿童总数应等于100

var nodeData = {"name": "CATEGORY","children": [{
"name": "verified",
"children": [{
  "name": "illegal",
  "size": 33 * (51/100)
}, {
  "name": "legal",
  "size": 33 * (49/100) }]}, {
"name": "unverified",
"children": [{
  "name": "low risk",
  "size": 67 * (36/100)}, {
  "name": "mid risk",
  "size": 67 * (20/100)}, {
  "name": "high risk",
  "size": 67 * (44/100)}] }]};

以下是

我在回答中犯了一个错误,我删除了这个错误,因为我读你的问题太快了。更仔细地看,问题只是数据的结构:您设置了孩子的
大小
,但也为家长设置了(不同的)
大小
hierarchy.sum()
根据子对象的值设置父对象的值。您必须更改数据结构,或者创建自己的布局。