Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 饼图布局起始角度_Javascript_D3.js - Fatal编程技术网

Javascript 饼图布局起始角度

Javascript 饼图布局起始角度,javascript,d3.js,Javascript,D3.js,我尝试在D3中使用startAngle作为饼图布局,以确保饼图的第一个部分始终从90度开始绘制: var pie = d3.layout.pie() .sort(null) .value(function(d) { return d.amount; }) .startAngle(90 * (Math.PI/180)); 这是可行的,但我发现馅饼现在短了90度: 我能找到的唯一解决方法是强制末端位置,如下所示: .endAngle(450 * (Math.PI/180)) 但这似乎是一个黑

我尝试在D3中使用startAngle作为饼图布局,以确保饼图的第一个部分始终从90度开始绘制:

var pie = d3.layout.pie()
.sort(null)
.value(function(d) { return d.amount; })
.startAngle(90 * (Math.PI/180));
这是可行的,但我发现馅饼现在短了90度:

我能找到的唯一解决方法是强制末端位置,如下所示:

.endAngle(450 * (Math.PI/180)) 
但这似乎是一个黑客。有没有正确的方法可以做到这一点?文件上说使用startAngle

将饼图布局的整体开始角度设置为指定值 弧度


因此,我假设饼图的其余部分将被相应地绘制,并与它开始的位置相匹配…

如果将
startAngle
设置为静态值,则所有饼图切片都将相同,即它们都将在相同的位置开始。对于您尝试执行的操作,实际上不需要修改饼图布局的角度(因为这是计算它们的第一步),而是用于绘制线段的圆弧生成器的角度

例如,要旋转90度,请执行以下操作:

var arc = d3.svg.arc().outerRadius(r)
            .startAngle(function(d) { return d.startAngle + Math.PI/2; })
            .endAngle(function(d) { return d.endAngle + Math.PI/2; });

完成JSFIDLE。

饼图缩短90度的原因是饼图布局的默认端角为2π,这也解释了您提到的“hack”起作用的原因(将角度添加到端角,使端角startAngle=2π)

@Lars(更改设置
d3.svg.arc()
)所描述的解决方案对于大多数情况应该足够了。但是,例如,如果饼图上有更多的元素,那么您必须更改
d3.layout.pie()
的设置,而不是
d3.svg.arc()
,因为标签行依赖于
d3.layout.pie()
计算的
d.startAngle
d.endAngle