Javascript 轴重新缩放后,旧缩放数据无法消失

Javascript 轴重新缩放后,旧缩放数据无法消失,javascript,d3.js,Javascript,D3.js,使用D3版本3.5.5。我使用一个示例作为模板:绘制数据的示例代码如下所示: var circle = this.vis.select("svg").selectAll("circle") .data(this.points, function(d) { return d; }); circle.enter().append("circle") .attr("class", function(d) { return d === self.selected ? "

使用D3版本3.5.5。我使用一个示例作为模板:绘制数据的示例代码如下所示:

  var circle = this.vis.select("svg").selectAll("circle")
      .data(this.points, function(d) { return d; });

  circle.enter().append("circle")
      .attr("class", function(d) { return d === self.selected ? "selected" : null; })
      .attr("cx",    function(d) { return self.x(d.x); })
      .attr("cy",    function(d) { return self.y(d.y); })
      .attr("r", 10.0)
      .style("cursor", "ns-resize")
      .on("mousedown.drag",  self.datapoint_drag())
      .on("touchstart.drag", self.datapoint_drag());

  circle
      .attr("class", function(d) { return d === self.selected ? "selected" : null; })
      .attr("cx",    function(d) { 
        return self.x(d.x); })
      .attr("cy",    function(d) { return self.y(d.y); });

  circle.exit().remove();
我认为这有四个部分:第一部分选择AllCircles并添加数据。第二个告诉我数据点在哪里是cx、cy和其他属性,第三个对我来说有点神秘,因为它似乎也设置了cx和cy,但没有其他属性。最后,我们执行并退出.remove,文档中说它将删除与数据数组无关的任何数据元素。在这个例子中,我看不出这是怎么发生的。当我在代码中设置断点时,this.points数组中的每个数据点都会调用这两个cx步骤

在我的代码中,我尝试执行相同的步骤:

hr_circles = self.graph_gps.svg.selectAll("hr_circles")
        .data(self.graph_gps.datay1); // , function(d){return d;}

hr_circles.enter().append("circle")
        .style("z-index", 3)
        .attr("class", "y1")
        .attr("r", 1)
        .attr("cx", function (d, i) {
          return xScale(d.time)
        })
        .attr("cy", function (d, i) {
          return yScale(d.vy)
        })
        .on("mouseover",
                function (d) {...displays a tooltip...})
        .on("mouseout", function (d) {
        });

  hr_circles.attr("class", "y1")
          .attr("cx", function (d, i) {
            return xScale(d.time)
          })
          .attr("cy", function (d, i) {
            return yScale(d.vy)
          })

  hr_circles.exit().remove();
当我的图形最初显示时,数据显示得很好,缩放正确,等等。当我尝试通过在x轴上拖动来重新缩放(如示例中所示)时,轴本身重新缩放得很好,重新缩放的数据显示在图形上,但原始数据仍然没有正确缩放,造成了很大的混乱!如何擦除或消除原始缩放数据?
试图发布图片,但我想我的声誉太低了。将发送给感兴趣的任何人。

您是如何实现拖动的?哦,等等,问题是您选择的是不存在的hr\u圆元素。您的选择总是空的。选择如示例中所示的圆形元素。嗯,我认为我遵循了示例。此外,在我尝试重新缩放之前,数据看起来很好,那么hr_圆怎么可能是空的呢?你为什么认为它是空的?我的代码首先用selectAll.data创建hr_圆,然后在创建的对象上调用enter.append,我认为这通常会添加数据,不是吗?这与示例相同,除非我遗漏了一些可能的内容,因为它不起作用!!。我没有显示拖动,因为这似乎是可行的,它的实现与示例非常相似。用户抓取一个x轴刻度标签,将其拖过,释放时,轴会重新缩放,数据显示为正确缩放,但旧数据图像仍保留在图形上。摆脱旧的数据图像是一个问题。我的代码和示例之间的一个区别是,他使用selectAllcircle,而我使用selectAllhr\u circles。我以为selectAll的论点只是一个名字,你可以用任何东西,但也许我错了?