在D3中转换折线图

时间:2015-02-01 22:59:19

标签: javascript animation d3.js

我使用D3库构建了一个多系列折线图。我一直在尝试制作折线图的动画,这样我就可以一次发出一行而不是全部5行。谁能给我一些关于如何解决这个问题的想法?我尝试过使用transition(),但我似乎错了。这是我到目前为止所做的 -

  var city = svg.selectAll(".city")
  .data(years)
  .enter().append("g")
  .attr("class", "city");

   city.append("path")
  .attr("class", "line");`

  d3.transition().selectAll(".line")
  .duration(500)
  .ease("linear")
  .attr("d", function(d){return line(d.values); })
  .style("stroke", function(d) {return color(d.name); })
  .attrTween("d",pathTween);

function pathTween() {
var interpolate = d3.scale.quantile()
.domain([0,1])
.range(d3.range(1,years.length+1));
return function(t){
  return line(data.slice(0,interpolate(t)));
};

1 个答案:

答案 0 :(得分:3)

D3过渡具有.delay()方法,允许您在每次过渡开始之前设置延迟。在你的情况下(每行分别开始),它看起来像这样:

d3.transition().selectAll(".line")
  .duration(500)
  .delay(function(d, i) { return i * 500; })
  .ease("linear")
  .attr("d", function(d){return line(d.values); })
  .style("stroke", function(d) {return color(d.name); });

这将获取每一行的索引(i)并根据该行的偏移量偏移转换的开始。