如何在 d3 中(同时)为饼图的半径和弧长设置动画?

How to animate the radius and the arc length of a pie chart in d3 (at the same time)?

我想出了如何在 Bostock's Pie Chart Update 之后使用 d3 更改具有新值的饼图的弧长,但我很难弄清楚如何也为 pic 图表的半径设置动画同时。

这是我当前代码的一个片段:

pie_inner.value(function(d) {
    return d.toward === toward || toward === "both" ? d.spent : 0;
});

path_inner
    .data(function(d) {
        return pie_inner(d.data).map(function(m) {
            m.r = d.r;
            return m;
        })
    })
    .transition()
    .duration(750)
    .attrTween("d", function(d) {
        var interpolate = d3.interpolate(this._current, d);
        this._current = interpolate(0);
        return function(t) {
            arc_inner.innerRadius(d.r - thickness);
            arc_inner.outerRadius(d.r);

            return arc_inner(interpolate(t));
        };
    });

使用此代码,弧长很好地动画化为新值,但半径 "jumps" 动画化为新值。

我看到 this code 对弧长和半径都进行了动画处理,但它是按顺序执行的,而不是同时执行的。

我正在使用函数 outerRadius() 设置半径,但我发现如果我只设置 属性,那么它就起作用了:

pie_inner.value(function(d) {
    return d.toward === toward || toward === "both" ? d.spent : 0;
});

path_inner
    .data(function(d) {
        return pie_inner(d.data).map(function(m) {
            m.r = d.r;
            return m;
        })
    })
    .transition()
        .duration(750)
        .attrTween("d", function(d) {
            d.innerRadius = d.r - thickness;
            d.outerRadius = d.r;
            var interpolate = d3.interpolate(this._current, d);
            this._current = interpolate(0);

            return function(t) {
                return arc_inner(interpolate(t));
            };
        });