D3 обновить круговые данные нулевыми значениями

Я обновляю круговую диаграмму с помощью динамического канала JSON. Моя функция обновления ниже

function updateChart(data) {
arcs.data(pie(data)); // recompute angles, rebind data

arcs.transition()
    .ease("elastic")
    .duration(1250)
    .attrTween("d", arcTween)

sliceLabel.data(pie(data));

sliceLabel.transition()
    .ease("elastic").duration(1250)
    .attr("transform", function (d) {
    return "translate(" + arc2.centroid(d) + ")";
})
    .style("fill-opacity", function (d) {
    return d.value == 0 ? 1e-6 : 1;
});
}

function arcTween(a) {
var i = d3.interpolate(this._current, a);
this._current = i(0);
return function (t) {
    return arc(i(t));
};

Когда JSON имеет 0 значений для всех объектов, дуги и метки исчезают. Именно то, что я хочу, чтобы произошло.

Проблема в том, что, когда я передаю новый JSON после того, как он был заполнен нулями, метки возвращаются, анимация и т. Д., Но дуги никогда не перерисовываются.

Любые предложения по исправлению моей функции обновления, чтобы дуги корректно перерисовывались после того, как их значения d были установлены на ноль?

-- редактировать --

Ниже Ларс предложил, чтобы я использовал .enter () точно так же, как и при создании графика. Я пытался сделать это, но результаты не изменились. Смотрите новую функцию обновления ниже.

this.updatePie = function updateChart(data) {
arcs.data(pie(data))
    .enter()
    .append("svg:path")
        .attr("stroke", "white")
        .attr("stroke-width", 0.5)
        .attr("fill", function (d, i) {
        return color(i);
})
    .attr("d", arc)
    .each(function (d) {
    this._current = d
})
arcs.transition()
    .ease("elastic")
    .duration(1250)
    .attrTween("d", arcTween)
sliceLabel.data(pie(data));
sliceLabel.transition()
    .ease("elastic").duration(1250)
    .attr("transform", function (d) {
    return "translate(" + arc2.centroid(d) + ")";
})
    .style("fill-opacity", function (d) {
    return d.value == 0 ? 1e-6 : 1;
});
}
function arcTween(a) {
var i = d3.interpolate(this._current, a);
this._current = i(0);
return function (t) {
    return arc(i(t));
};
}

Ответы на вопрос(1)

Ваш ответ на вопрос