我对 D3 和部分 SVG 完全不熟悉,所以我有一些基本问题。首先,我有问题的代码可以在http://dotnetcarpenter.github.io/d3-test/上查看,我使用了带有 D3.js和饼图更新的简单饼图示例,II作为示例来运行开始。
如您所见,当低路径值切换到较高值时,动画最终会倾斜。这显然不是我想要的。我想我的计算顺序是错误的,但我不知道该怎么做。我正在使用上一个示例中的代码:
function change() {
//...
path.transition().duration(750).attrTween("d", arcTween); // redraw the arcs
}
// where arcTween is
function arcTween(a) {
var i = d3.interpolate(this._current, a);
this._current = i(0);
return function(t) {
return arc(i(t));
};
}
另一个问题是在扇区上贴标签。我已将更新内容放在更改函数中,并且能够读出并仅在值介于 0 和 100 之间时才呈现它们。但是我不能以任何方式放置它们。看第一个例子,我想我可以做这样的事情:
text.data(data)
.text(setText)
.attr("transform", function (d) {
// we have to make sure to set these before calling arc.centroid
d.innerRadius = 0;
d.outerRadius = radius;
return "translate(" + arc.centroid(d) + ")";
})
.attr("text-anchor", "middle") //center the text on it's origin
其中 text 是 d3 选择,arc 是:d3.svg.arc().outerRadius(radius)
但我得到“ Unexpected value translate(NaN,NaN) parsing transform attribute. ” Firefox 中的警告,并且标签彼此重叠。
我感谢任何帮助和提示。谢谢!