javascript - 取消 D3 中元素的分组

标签 javascript d3.js svg grouping

在我看来,D3 中没有用于取消元素分组的 native 函数。 因此,我尝试从组中删除该元素,然后使用此 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. 您尝试从圆圈选项中选择一个圆圈。但是,这会选择该选择中圆圈的元素,这没有任何意义。而不是

    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>

关于javascript - 取消 D3 中元素的分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52444515/

相关文章:

使用回调的 JavaScript 异步填充条

javascript - Rails 4 Nested_form 在 5 个问题后删除链接

javascript - 手动缩放时出现 d3 错误

linux - 适用于 Linux 的 2D 渲染库(和视频)

javascript - 如何在 d3.js 中的 svg 中拖放一组矩形?

javascript - 更改img src attr问题

javascript - 使用 Javascript 点击提交按钮后如何访问复选框表单值?

javascript - 线性刻度的十字准线/x 值工具提示

javascript - 部队布局中的永动机

javascript - 将 nodejs/express 应用程序中的 json 文件加载到 d3