Я пытаюсь создать анимированный сегмент дуги с d3.js. Я получил дугу и переходный процесс, но пока анимация работает, дуга искажается, и я не могу понять, почему.Проблема с анимацией сегмента дуги d3.js
Вот что я до сих пор:
var dataset = {
apples: [532, 284]
};
var degree = Math.PI/180;
var width = 460,
height = 300,
radius = Math.min(width, height)/2;
var color = d3.scale.category20();
var pie = d3.layout.pie().startAngle(-90*degree).endAngle(90*degree)
.sort(null);
var arc = d3.svg.arc()
.innerRadius(radius - 100)
.outerRadius(radius - 50);
var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height)
.append("g")
.attr("transform", "translate(" + width/2 + "," + height/2 + ")");
var path = svg.selectAll("path")
.data(pie(dataset.apples))
.enter().append("path")
.attr("fill", function(d, i) { return color(i); })
.attr("d", arc);
window.setInterval(dummyData, 2000);
function dummyData(){
var num = Math.round(Math.random() * 100);
var key = Math.floor(Math.random() * dataset.apples.length);
dataset.apples[key] = num;
draw();
};
function draw(){
svg.selectAll("path")
.data(pie(dataset.apples))
.transition()
.duration(2500)
.attr("fill", function(d, i) { return color(i); })
.attr("d", arc);
}
Вы видели [этот пример] (http://blog.stephenboak.com/2011/08/07/easy-as-a-pie.html)? –
Я думаю, что D3 интерполирует между вами каждый набор точек, поэтому анимация между каждым состоянием, перемещая точки вдоль прямой, а не вдоль радиального, как вам хотелось бы. Для этого вам нужно указать функцию tweening, которая определяет требуемую анимацию перехода. Пример, связанный с Lars, должен показать вам, что вам нужно. –
Пример, связанный странно, относится к функции ('pieTween'), которая никогда не предоставляется. Взгляните на эти, возможно, более полезные примеры: [Обновление диаграммы, II] (http://bl.ocks.org/mbostock/1346410), [Arc Tween (Clock)] (http://bl.ocks.org/mbostock/1098617) и [объяснение, почему это необходимо создателю d3 Майком Бостоком] (http://stackoverflow.com/a/10090745/1798568). – serhalp