viernes, 12 de febrero de 2010

jqPlot - Actualizar eje Y

Para redimensionar el eje Y en nuestro gráfico tras la eliminación de una linea, es necesario aplicar los siguientes parches y luego, en nuestro código, setear la variable 'show' en 'false' de nuestra serie (linea) y darle un 'replot' a nuestro gráfico con la opción '{resetAxes:['yaxis']}'


Ejemplo: chart.replot({resetAxes:['yaxis']})


************
* PARCHE 1 *
************


Archivo: jquery.jqplot.js
Funcion: $.jqplot.LinearAxisRenderer.prototype.init

Agregar un 'if (s.show)' en el 'for' interno para que solo se calcule el ymax con las lineas que sean visibles

(var: db = _dataBounds)
(_dataBounds: variable que tiene el valor maximo alcanzado por alguna linea)

---------

for (var j=0; j-> if (s.show) {
if (this.name == 'xaxis' || this.name == 'x2axis') {
if (d[j][0] < db.min || db.min == null) {
db.min = d[j][0];
}
if (d[j][0] > db.max || db.max == null) {
db.max = d[j][0];
}
}
else {
if (d[j][1] < db.min || db.min == null) {
db.min = d[j][1];
}
if (d[j][1] > db.max || db.max == null) {
db.max = d[j][1];
}
}
-> }
}

---------


************
* PARCHE 2 *
************


Para reiniciar la variable _dataBounds es necesario aplicar el siguiente parche:

Archivo: jquery.jqplot.js
Funcion: Axis.prototype.resetScale

Agregar un reset a la variable _dataBounds

---------

Axis.prototype.resetScale = function() {
this.min = null;
this.max = null;
-> this._dataBounds = {min: null, max: null};
this.numberTicks = null;
this.tickInterval = null;
};

---------

Para limpiar estas variables, se debe llamar al 'replot' de la siguiente manera:

chart.replot({resetAxes:['yaxis']});