Primefaces chart + jqplot extender - y轴的舍入值

pho*_*360 7 jsf graph java-ee jqplot primefaces

背景

我有一个使用jqplot选项扩展的primefaces折线图(x上的日期,y上的整数> = 0):

function extender() {
        this.cfg.axes = {
            xaxis : {
                renderer : $.jqplot.DateAxisRenderer, 
                rendererOptions : {
                    tickRenderer:$.jqplot.CanvasAxisTickRenderer
                },
                tickOptions : { 
                    fontSize:'10pt',
                    fontFamily:'Tahoma', 
                    angle:-40,                     
                    formatString:'%b-%y'
                },
                tickInterval:'2592000000'
            },
            yaxis : {
                min: 0,
                rendererOptions : {
                    tickRenderer:$.jqplot.CanvasAxisTickRenderer,
                },
                tickOptions: {
                    fontSize:'10pt', 
                    fontFamily:'Tahoma', 
                    angle:0,
                    formatString: '%d'
                }
            },
        };
        this.cfg.axes.xaxis.ticks = this.cfg.categories;
    }
Run Code Online (Sandbox Code Playgroud)

我正在使用jqplot扩展器在x轴上有自定义日期间隔,这是正常工作:

工作正常

问题

当我min: 0在y轴上使用该选项时,数字的格式变得非常时髦,特别是当有小值时:

分数

请注意,minYprimefaces中的属性不起作用(可能是因为扩展程序覆盖了它)

为了解决这个问题,我使用了formatString: %d.它有效,但它会产生滴答数量的问题:

在此输入图像描述

正如您在屏幕截图中看到的那样,值1的行数次.

如何确保我在y轴上没有多次获得相同的值?

我真的不能有一个静态的刻度数,因为当数据变大时(比如大约100),我确实想要y轴上的几个值(例如20,40等...)

pho*_*360 6

我设法用Mehasse的帖子解决了我的问题.

定义max像Mehasse建议的值并没有删除不需要的刻度线但帮助我找到答案.

默认情况下,primefaces/jqplot想要有4y轴刻度线.因此,如果最大值低于4,则在向上舍入(formatString: '%d')时,y轴标签中将存在重复.

我基本上希望的,就是周期的时间间隔是无论Max(y) \ 4何时Max(y) > 4,或1以其他方式:

function actionPlanExtender() {
        var series_max =maxSeries(this.cfg.data);
        var numberOfTicks =4;
        var tickInterval = Math.max(1, Math.ceil(series_max/numberOfTicks));
        this.cfg.axes = {
            xaxis : {
                renderer : $.jqplot.DateAxisRenderer, 
                rendererOptions : {
                    tickRenderer:$.jqplot.CanvasAxisTickRenderer
                },
                tickOptions : { 
                    fontSize:'10pt',
                    fontFamily:'Tahoma', 
                    angle:-40,                     
                    formatString:'%b-%y'
                },
                tickInterval:'2592000000'
            },
            yaxis : {
                min: 0,
                rendererOptions : {
                    tickRenderer:$.jqplot.CanvasAxisTickRenderer,
                },
                tickOptions: {
                    fontSize:'10pt', 
                    fontFamily:'Tahoma', 
                    angle:0,
                    formatString: '%d',
                },
                tickInterval: tickInterval
            },
        };
        this.cfg.axes.xaxis.ticks = this.cfg.categories;
    }
Run Code Online (Sandbox Code Playgroud)

为了计算在y-max值,我得到使用情节值this.cfg.data是形式[series_1,..., series_n]series_i = [[x_1, y_1],..., [x_m, y_m]]

maxSeries功能如下:

function maxSeries(datas) {
    var maxY = null;
    var dataLength = datas.length;
    for ( var dataIdx = 0; dataIdx < dataLength; dataIdx++) {
        var data = datas[dataIdx];
        var l = data.length;
        for ( var pointIdx = 0; pointIdx < l; pointIdx++) {
            var point = data[pointIdx];
            var y = point[1];
            if (maxY == null || maxY < y) {
                maxY = y;
            }
        }
    }
    return maxY;
}
Run Code Online (Sandbox Code Playgroud)

请注意,在我的情况下,我知道我的情况,我没有下面的价值0.如果不是这种情况,则应更新此代码.