在Dygraphs中有两个y轴,对齐为零

时间:2015-10-05 18:23:26

标签: dygraphs

当使用dygraphs显示两个系列(轴y和y2)时,如何绕过具有公共零的两个y轴?

E.g。对

1,-1,0
2,1,2

dygraph目前将第一个y轴从-1设置为1,第二个从0设置为2.由于两个值都应该表示更改(delta),因此这种方式非常混乱。

作为旁注,我将valueRange设置为[null,null]两个轴(数据集的某些部分具有相当大的值,其他部分非常小 - 放大时我希望能够更好地看到当地的差异)。我也在使用自定义绘图仪(multiColumnBarPlotter进行调整以处理负值)。

1 个答案:

答案 0 :(得分: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)
        })
    }
})
相关问题