代码之家  ›  专栏  ›  技术社区  ›  tic

在D3中解组元素

  •  0
  • tic  · 技术社区  · 7 年前

    在我看来,D3中似乎没有本机函数来解组元素。 因此,我尝试从组中删除元素,然后使用append方法重新创建元素 stackoverflow 回答。

    不幸的是我的代码( fiddle )包含(至少)一个错误。我不明白是什么。

    [创建四个红色圆圈,然后将第一个从所有圆圈组中分离出来后,将其颜色从红色更改为绿色]

        var svg = d3.select('svg');
    
        var dataSet = [10, 20, 30, 40];
    
        var group=svg.append("g");
        var circles = group.selectAll('circle')
        .data(dataSet)
        .enter()
        .append('circle')
        .attr("r",function(d){ return d })
        .attr("cx",function(d, i){ return i * 100 + 50 })
        .attr("cy",50)
        .attr("fill",'red');
    
        var circle=circles.select("circle");
        var removed = circle.remove();
        var newcircle=svg.append(function() {
            return removed.node();
        });
        d3.select(newcircle).attr("fill","green");
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   altocumulus    7 年前

    代码中有两个错误:

    1. 您尝试从中选择一个圆 circles 附属的 -选择中的圆元素,这没有任何意义。而不是

      var circle = circles.select("circle");
      

      var circle = group.select("circle");
      

      这样可以从组中选择圆。

    2. newCircle 已经是d3选择对象。这是一个错误重新选择做 d3.select(newcircle)

      newcircle.attr("fill", "green");
      

    把这些放在一起,你会得到如下结果:

       var svg = d3.select('svg');
    
       var dataSet = [10, 20, 30, 40];
    
       var group  =svg.append("g");
       var circles = group.selectAll('circle')
        .data(dataSet)
        .enter().append('circle')
          .attr("r",function(d){ return d })
          .attr("cx",function(d, i){ return i * 100 + 50 })
          .attr("cy",50)
          .attr("fill",'red');
    
       var circle = group.select("circle");
       var removed = circle.remove();
       var newcircle = svg.append(function() {
         return removed.node();
       });
       newcircle.attr("fill", "green");
    <script src="https://d3js.org/d3.v5.js"></script>
    
    <svg width="600" height="200"></svg>