2016-03-01 85 views
0

我有一个简单的多线图,每个数据点上都有圆圈。我编写了禁用一条或多条可更新Y轴的行的功能。例如,如果我删除Y轴上具有最高值的线,则会重新绘制Y轴以更新比例。发生这种情况时,这些线条也会更新为新的比例,但我无法让这些圆圈用线条更新它们的位置。d3在y轴上移动圆圈更新

这里有相关位:

var y = d3.scale.linear().range([height, 0]); 
var yAxis = d3.svg.axis() 
     .scale(y) 
     .orient("left"); 
y.domain(d3.extent(data, function(d) { return d.pfcLevel; })); 

这里是更新Y轴(作品)的函数:

function rescaleY() { 
    y.domain([0, getMaxY()]); 
    svg.select(".y").transition() 
     .duration(1000).ease("sin-in-out") 
     .call(yAxis); 
} 

这里是更新线(作品)的函数:

function updateLines() { 
    svg.selectAll(".line") 
     .transition().duration(500) 
     .delay(function(d, i) { return i * 20; }) 
     .attr("d", function(d) { 
      return line(d.values); 
     }); 
} 

这里是更新圆圈位置(不工作)的功能:

function updateCircles() { 
    svg.selectAll(".circle") 
     .transition().duration(500) 
     .delay(function(d, i) { return i * 10; }) 
     .attr("cy", function(d, i) { return y(d.pfcLevel) }); 
} 
+0

没有看到你包含的代码。也许你忘了将这些圈子分配给一个“圈子”班?当你运行'svg.selectAll(“。circle”)。size()'?时你会得到一个非零的数字吗? – meetamit

+0

如果可以,设置一个小提琴,我们可以看看? – thatOneGuy

+0

这是一个小提琴:https://jsfiddle.net/goodspeedj/5ewLxpre/3/ 点击右手图例中的矩形将启用/禁用线条。 – JamesE

回答

1

您的circle类元素为g元素,它们没有cy属性。选择器应该是:

svg.selectAll(".circle circle") 
    .transition().duration(500) 
    ... 
+0

这样做 - 这么简单...谢谢。 – JamesE