Javascript 饼图布局起始角度
我尝试在D3中使用startAngle作为饼图布局,以确保饼图的第一个部分始终从90度开始绘制: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)) 但这似乎是一个黑
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