diff --git a/src/coord/cartesian/Grid.js b/src/coord/cartesian/Grid.js index 4a8be7eabc096e25a6f93521575db984bff642d4..e6886eb57fa06647867a5e7352b04b908d60e2f3 100644 --- a/src/coord/cartesian/Grid.js +++ b/src/coord/cartesian/Grid.js @@ -5,8 +5,6 @@ */ define(function(require, factory) { - 'use strict'; - var zrUtil = require('zrender/core/util'); var Cartesian2D = require('./Cartesian2D'); var Axis2D = require('./Axis2D'); @@ -187,6 +185,33 @@ define(function(require, factory) { y: 0 }; + ecModel.eachComponent('xAxis', createAxisCreator('x'), this); + + ecModel.eachComponent('yAxis', createAxisCreator('y'), this); + + if (! axesCount.x || ! axesCount.y) { + api.log('Grid must has at least one x axis and one y axis'); + // Roll back + this._axesMap = {}; + this._axesList = []; + return; + } + + zrUtil.each(axesMap.x, function (xAxis, xAxisIndex) { + zrUtil.each(axesMap.y, function (yAxis, yAxisIndex) { + var key = 'x' + xAxisIndex + 'y' + yAxisIndex; + var cartesian = new Cartesian2D(key); + this._coordsMap[key] = cartesian; + this._coordsList.push(cartesian); + + cartesian.addAxis(xAxis); + cartesian.addAxis(yAxis); + }, this); + }, this); + + this._updateCartesianFromSeries(ecModel, gridModel); + + function createAxisCreator(axisType) { return function (axisModel, idx) { if (!isAxisUsedInTheGrid(axisModel, gridModel, ecModel)) { @@ -217,32 +242,6 @@ define(function(require, factory) { axesCount[axisType]++; } } - - ecModel.eachComponent('xAxis', createAxisCreator('x'), this); - - ecModel.eachComponent('yAxis', createAxisCreator('y'), this); - - if (! axesCount.x || ! axesCount.y) { - api.log('Grid must has at least one x axis and one y axis'); - // Roll back - this._axesMap = {}; - this._axesList = []; - return; - } - - zrUtil.each(axesMap.x, function (xAxis, xAxisIndex) { - zrUtil.each(axesMap.y, function (yAxis, yAxisIndex) { - var key = 'x' + xAxisIndex + 'y' + yAxisIndex; - var cartesian = new Cartesian2D(key); - this._coordsMap[key] = cartesian; - this._coordsList.push(cartesian); - - cartesian.addAxis(xAxis); - cartesian.addAxis(yAxis); - }, this); - }, this); - - this._updateCartesianFromSeries(ecModel, gridModel); }, /** @@ -306,23 +305,32 @@ define(function(require, factory) { var xAxis = cartesian.getAxis('x'); var yAxis = cartesian.getAxis('y'); if (axisData.x.length) { - if (axisData.xModel.get('scale')) { + var xModel = axisData.xModel; + if (xModel.get('scale')) { axisData.x.push(0); } xAxis.scale.setExtentFromData(axisData.x); + + niceScaleExent(xAxis, xModel); } if (axisData.y.length) { - if (axisData.yModel.get('scale')) { + var yModel = axisData.yModel; + if (yModel.get('scale')) { axisData.y.push(0); } yAxis.scale.setExtentFromData(axisData.y); + + niceScaleExent(yAxis, yModel); } }); - // Set axis from option - zrUtil.each(this._axesList, function (axis) { - axis.scale.niceExtent(); - }); + function niceScaleExent(axis, model) { + var min = model.get('min'); + var max = model.get('max'); + axis.scale.setExtent(min, max); + + axis.scale.niceExtent(model.get('splitNumber'), !!min, !!max); + } } }; diff --git a/src/scale/Interval.js b/src/scale/Interval.js index eacbacfd86fd4a9d117c0600f35d68a3a88e6f32..e16d5cc0357e9cc77fc61d1d9ef4ecafda6fae07 100644 --- a/src/scale/Interval.js +++ b/src/scale/Interval.js @@ -71,11 +71,8 @@ define(function (require) { var max = union ? extent[1] : -Infinity; var min = union ? extent[0] : Infinity; for (var i = 0; i < data.length; i++) { - if (data[i] == null || data[i] === '-') { - continue; - } - max = Math.max(data[i], max); - min = Math.min(data[i], min); + data[i] > max && (max = data[i]); + data[i] < min && (min = data[i]); } this.setExtent(min, max); @@ -96,8 +93,12 @@ define(function (require) { */ setExtent: function (start, end) { var thisExtent = this._extent; - thisExtent[0] = isNaN(start) ? 0 : start; - thisExtent[1] = isNaN(end) ? 0 : end; + if (! isNaN(start)) { + thisExtent[0] = start; + } + if (! isNaN(end)) { + thisExtent[1] = end; + } }, /** @@ -197,16 +198,22 @@ define(function (require) { /** * Nice extent. - * @param {number} [approxTickNum = 10] Given approx tick number + * @param {number} [approxTickNum = 10] Given approx tick number + * @param {boolean} [fixMin=false] + * @param {boolean} [fixMax=false] */ - niceExtent: function (approxTickNum) { + niceExtent: function (approxTickNum, fixMin, fixMax) { this.niceTicks(approxTickNum); var extent = this._extent; var interval = this._interval; - extent[0] = mathFloor(extent[0] / interval) * interval; - extent[1] = mathCeil(extent[1] / interval) * interval; + if (! fixMin) { + extent[0] = mathFloor(extent[0] / interval) * interval; + } + if (! fixMax) { + extent[1] = mathCeil(extent[1] / interval) * interval; + } } };