2015-10-05 53 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) 
     }) 
    } 
})