2017-04-13 45 views
1

我嘗試在重新縮放我的座標軸後獲取新的座標軸值。d3.js重新縮放後得到新的域值

我試圖讓他們從y.domain()回答here但返回的值是初始值。

那麼我在這裏做錯了什麼?

相關代碼:

function zoomed() { 

    for(let i = 0; i < ys.length; i++){ 
    yAxes[i].call(
     d3.axisLeft(ys[i]) 
     .scale(d3.event.transform.rescaleY(ys[i])) 
    ) 
    } 

    //Now I need the new values 

    console.log(ys[0].domain()) //returns [0, 10] which are my initial domain values for this axis. 

} 

放大後,我在屏幕上的值大於0和小於10 那麼,如何讓我的域新最小值和最大值?

Here是我的代碼的舊版本的提琴,它有完全相同的行爲(請參閱zoomed()函數)。

也許我誤解了域是什麼,它是如何工作的,我需要的是我軸的新的最大值和最小值。

幫助將不勝感激

+0

你能發佈一個小提琴或你到目前爲止的代碼 –

+0

添加小提琴問題 –

回答

3

基於1998年以來的小提琴這個代碼我的回答:

function zoomed() { 
    let center = getBoundingBoxCenterX(rect); 
    let chartsWidth = (2 * center) * d3.event.transform.k; 
    d3.event.transform.x = center - chartsWidth/2; 
    xAxis.call(d3.axisBottom(x).scale(d3.event.transform.rescaleX(x))); 
    yAxis.call(d3.axisLeft(y).scale(d3.event.transform.rescaleY(y))); 
    zAxis.call(d3.axisRight(z).scale(d3.event.transform.rescaleY(z))); 

    //here i need the new values 
    console.log(y.domain()) //returns [0,6] 

編輯

你可以得到座標軸的比例是這樣的:

let leftAxis = d3.axisLeft(y).scale(d3.event.transform.rescaleY(y)); 
console.log('new domain values', leftAxis.scale().domain()) 

我有一個版本的th e小提琴這個工作:https://jsfiddle.net/aj5sLz5u/