vis graph2d仅限y轴

时间:2015-10-06 20:10:36

标签: javascript graph 2d vis.js

有没有办法让y轴 具有基于整数的刻度线。这将是一个巨大的帮助。此外,如果刻度线只能是

的倍数
2 when 0 <= window height <= 10
10 when 10 < window height <= 100
100 window height < 100

......那会很好 - 虽然不是绝对必要的。抱歉,伪代码。

现在我正在做以下事情并且工作正常,但它并不好。

this.dataset = new vis.DataSet();
var options = {
    start: vis.moment(),
    end: vis.moment().add(50, 'seconds'),
    showMajorLabels: false,
    zoomable: true,
    dataAxis: {
        left: {
            range: {
                min: 0
            }
        },
    }
    style: 'bar',
    drawPoints: false,
}
this.graph = new vis.Graph2d(container/*assume I made it :)*/, this.dataset, options);

//+~~~~~~~~~~+
//| LATER ON |
//+~~~~~~~~~~+

range = this.graph.getWindow();
var current = this.dataset.get({
    filter: function(item) {
        return item.x > range.start && item.x < range.end;
    }
});
var maxY = 0;
for (var i = 0, currentLen = current.length; i < currentLen; i++) {
    if (current[i].y > maxY) {
        maxY = current[i].y;
    }
}
maxY = maxY < 8 ? Math.floor((maxY + 4) / 4) * 4 : Math.floor((maxY + 6) / 6) * 6; // makes tick marks at places that don't cause decimal values @_@
this._graph.setOptions({
    dataAxis: {
        left: {
            range: {
                max: maxY,
            }
        }
    }
});

快速注意:maxY = maxY < 8 ? ...行仅适用于我测试的1-11。我不确定更高的数字。但是,希望这可以修复。

2 个答案:

答案 0 :(得分:2)

答案非常晚,但假设您只关心y轴标签本身而不是水平网格线,您可以这样做:

UIFeedbackGenerator

您还可以访问该功能中的var options = { dataAxis: { left: { format: function(value){ // don't show non-integer values on data axis return Math.round(value) === value ? value : ""; } } } } ,并根据您描述的行为进行相应调整。

答案 1 :(得分:0)

所以,看起来我实现的方法是有效的(例如,我只看到整数而不管y值)如果你只想要整数并且不介意(或想要)最小y值为4,另外,不要介意这一步是什么。

但请注意,这仅使用[0,inf](正数,数字或0)进行测试。

如果您有一个使用vis的解决方案来执行此操作 - 而不是手动检查所有最大值 - 请分享答案