2014-02-19 113 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你應該發佈一個關於這個問題的單獨問題。至少從你的評論來看,我不清楚問題是什麼。 –