Я изучаю переходы в D3js, пытаясь заставить их работать с простой круговой диаграммой, которая получена из a Mike Bostock example.D3 круговая диаграмма перехода
Я хочу переместить данные в пироге из данных в data2, но диаграмма не обновляется.
Это переход заявление:
path.selectAll("path").data(pie(data2)).transition().duration(2000);
Что мне не хватает?
EDIT
Я получил это работает с ниже. Теперь я хотел бы понять, почему это работает. Я понимаю часть .attr ("d", arc), но зачем мне нужно selectAll ("путь")?
path.selectAll("path").data(pie(data2)).transition().duration(2000).attr("d",arc);
END EDIT
Полный код (JSFiddle here):
var width = 200,
height = 200,
radius = Math.min(width, height)/2;
var color = d3.scale.category20();
var data = [2, 19, 18, 99, 100];
var data2 = [100, 1200, 20, 88, 12];
var pie, arc, svg, path, data;
var chartCanvas = d3.select("#chart")
.append("svg")
.attr("width", width)
.attr("height", height);
var path = chartCanvas
.append("g")
.attr("transform", "translate(" + width/2 + "," + height/2 + ")");
function setupPieChart() {
pie = d3.layout.pie()
.value(function (d) {
return d;
})
.sort(null);
arc = d3.svg.arc()
.innerRadius(radius - 100)
.outerRadius(radius - 20)
path
.selectAll("path")
.data(pie(data))
.enter()
.append("path")
.attr("fill", function (d, i) {
return color(i);
})
.attr("d", arc)
.each(function (d) {
this._current = d;
}); // store the initial angles
console.log(path);
}
setupPieChart();
console.log(path);
path.selectAll("path").data(pie(data2)).transition().duration(2000);
Существует заметная разница между примером Майка Бостока и вашим. Он действительно предоставляет обратный вызов ['attrTween()'] (https://github.com/mbostock/d3/wiki/Transitions#attrTween), который отвечает за переход атрибута 'd' пути, соответствующего новым значениям данных. Поскольку ваш код не пропускает эту функцию, D3 не может определить, что именно вы хотите перевести. – altocumulus
@altocumulus, спасибо, я изменил это. Почему мне нужно .selectAll («путь»), хотя для его работы? – seb