在D3js中再次绑定数据

时间:2015-10-15 10:52:48

标签: arrays d3.js

我第一次将数据绑定在d3js中,如下所示。

var svg=d3.select("body").append("svg");

var circle = svg.selectAll("circle")
.data([32, 57, 293]).enter();

circle.append("circle")
.attr("cy", 60)
.attr("cx", function(d, i) { return i * 100 + 30; })
.attr("r", function(d) { return Math.sqrt(d); });

现在我想在给定数组中推送数据,并且还想绘制它的圆圈。它将如何绘制?我这样做。

var circle = svg.selectAll("circle")
.data([93]).enter();

circle.append("circle")
.attr("cy", 60)
.attr("cx", function(d, i) { return i * 100 + 30; })
.attr("r", function(d) { return Math.sqrt(d); });

请帮我解决这个问题。

1 个答案:

答案 0 :(得分:1)

要执行此类操作,您需要进行更新function update(data)

如下图所示:

//make an svg
var svg=d3.select("body").append("svg").attr({
      "width": "500px",
      "height": "500px"
  });
var data = [32, 57, 293];
update(data);
//add a node after 5 seconds
setTimeout(function(){ data.push(90); update(data) }, 5000);

//remove a node after 10 seconds
setTimeout(function(){ data.pop(); update(data) }, 10000);


function update(ary){
    //selection of sircle from svg
    var circle = svg.selectAll("circle")
    .data(ary);
    //add circle
    circle.enter().append("svg:circle")
    .attr("cy", 60)
    .attr("cx", function(d, i) { return i * 100 + 30; })
    .attr("r", function(d) { return Math.sqrt(d); });
    //remove any circle which is not in selection
    circle.exit().remove();
}

工作代码here

这是一个很好的read将帮助您理解这个概念。