2014-02-19 112 views
4

我想创建一个具有多个(线性)轴的动态图形。绘制坐标轴后,我想(随着新数据的到来)更改Data Domain并重绘/更新坐标轴。我可以用D3选择现有的轴并执行此操作,还是必须将每个轴显式保存在我的代码中?我希望我的问题不会让人困惑。D3动态重绘Y轴

// init all Y-Axis 
$.each(chart.YAxes, function (index) { 
      var yScale, yAxis; 
      yScale = d3.scale.linear().range([chartHeight, 0]); 
      yScale.domain([this.YMin, this.YMax]); 

      yAxis = d3.svg.axis() 
         .scale(yScale) 
         .ticks(10, this.Title) 
         .orient("left"); 

      d3Chart.append("g") 
        .attr("class", "yAxis " + "y" + this.ID) 
        .call(yAxis); 
...... 

// update Y-Axis (after new data arrives...) 
var myYAxis = d3.select(".y" + yAxis.ID); 
var myScale = myYAxis. **// get Scale ??** 
myScale.domain([newYMin, newYMax]); 
d3Chart.select(".y" + yAxis.ID) 
      .transition().duration(300).ease("sin-in-out") 
      .call(myYAxis); 

thx ...!

+0

你能提供一个小提琴吗? –

回答

1

您需要保持对轴对象的引用,以便可以再次调用它。选择包含它并调用它的DOM元素将不起作用。有很多关于如何更新坐标轴的例子,例如在this question

+0

我同意你的观点,至少我无法让它工作。老实说,我认为应该有办法做到这一点。事实上,在这个例子中,你已经把代码的三个部分中唯一的全局引用仅仅是svg对象,我认为我们可以从DOM中获得它。但是,事实并非如此,我不明白为什么...... – ackuser

+0

@ackuser你应该发布一个关于这个问题的单独问题。至少从你的评论来看,我不清楚问题是什么。 –