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等...)
我设法用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.如果不是这种情况,则应更新此代码.
| 归档时间: |
|
| 查看次数: |
9896 次 |
| 最近记录: |