2015-10-05 54 views
0

當使用dygraphs顯示兩個系列(軸y和y2)時,如何繞兩個具有共同零點的y軸移動?Dygraph中有兩個y軸對齊爲零

E.g.對於

1,-1,0 
2,1,2 

dygraph目前會把第一y軸從-1到1,然後從0秒到2。作爲這兩個值都應該表示的變化(增量),它是非常混亂這種方式。

作爲一個側面提示,我將兩個軸的valueRange設置爲[null,null](某些部分數據集有相當大的值,其他部分相當小 - 放大時我希望能夠更好看到當地的差異)。我還使用自定義繪圖儀(multiColumnBarPlotter進行調整以處理負值)。

回答

0

我已經解決了這個問題(現在?),通過調整y軸相對於彼此的範圍,所以每個軸的正負比例是相同的。下面的代碼似乎對我的用例工作正常。

function zoom(minDate, maxDate) { 
     minFirst = g.yAxisRanges()[0][0] 
     maxFirst = g.yAxisRanges()[0][1] || 1 

     minSecond = g.yAxisRanges()[1][0] 
     maxSecond = g.yAxisRanges()[1][1] || 1 

     if (minFirst >= 0 && minSecond >= 0) { 
       // setting both to zero will align zero at bottom 
       minFirst = secondFirst = 0; 
     } else { 
       // calculate ratio (negative part : positive part) 
       var ratioFirst = - minFirst/maxFirst 
       var ratioSecond = - minSecond/maxSecond 

       if (minFirst >= 0 || ratioFirst < ratioSecond) { 
         minFirst = - maxFirst * ratioSecond 
       } else { 
         minSecond = - maxSecond * ratioFirst 
       } 
     } 

     g.updateOptions({ 
       axes: { 
         y: { valueRange: [minFirst, maxFirst] }, 
         y2: { valueRange: [minSecond, maxSecond] } 
       } 
     }); 
} 

function resetY() { 
     g.updateOptions({ 
       valueRange: null, 
       axes: { 
         y: { valueRange: [null, null] }, 
         y2: { valueRange: [null, null] } 
       } 
     }); 
} 

g.updateOptions({ 
    zoomCallback: function(minDate, maxDate, yRanges) { 
     resetY(); 
     g.ready(function() { 
      zoom(minDate, maxDate) 
     }) 
    } 
})