diff --git a/src/coord/cartesian/Grid.js b/src/coord/cartesian/Grid.js index f9c039ca16..15322ea9b0 100644 --- a/src/coord/cartesian/Grid.js +++ b/src/coord/cartesian/Grid.js @@ -447,9 +447,7 @@ define(function(require, factory) { function unionExtent(data, axis, seriesModel) { each(seriesModel.coordDimToDataDim(axis.dim), function (dim) { - axis.scale.unionExtent(data.getDataExtent( - dim, axis.scale.type !== 'ordinal' - )); + axis.scale.unionExtentFromData(data, dim); }); } }; diff --git a/src/coord/parallel/Parallel.js b/src/coord/parallel/Parallel.js index 9399763678..a2a0c89ce1 100644 --- a/src/coord/parallel/Parallel.js +++ b/src/coord/parallel/Parallel.js @@ -116,7 +116,7 @@ define(function(require) { each(this.dimensions, function (dim) { var axis = this._axesMap[dim]; - axis.scale.unionExtent(data.getDataExtent(dim)); + axis.scale.unionExtentFromData(data, dim); axisHelper.niceScaleExtent(axis, axis.model); }, this); }, this); diff --git a/src/coord/polar/polarCreator.js b/src/coord/polar/polarCreator.js index 5532d6c357..7c963bf267 100644 --- a/src/coord/polar/polarCreator.js +++ b/src/coord/polar/polarCreator.js @@ -46,12 +46,8 @@ define(function (require) { ecModel.eachSeries(function (seriesModel) { if (seriesModel.coordinateSystem === polar) { var data = seriesModel.getData(); - radiusAxis.scale.unionExtent( - data.getDataExtent('radius', radiusAxis.type !== 'category') - ); - angleAxis.scale.unionExtent( - data.getDataExtent('angle', angleAxis.type !== 'category') - ); + radiusAxis.scale.unionExtentFromData(data, 'radius'); + angleAxis.scale.unionExtentFromData(data, 'angle'); } }); diff --git a/src/coord/radar/Radar.js b/src/coord/radar/Radar.js index 489068cab5..0ba5d86ee7 100644 --- a/src/coord/radar/Radar.js +++ b/src/coord/radar/Radar.js @@ -131,7 +131,7 @@ define(function (require) { } var data = radarSeries.getData(); zrUtil.each(indicatorAxes, function (indicatorAxis) { - indicatorAxis.scale.unionExtent(data.getDataExtent(indicatorAxis.dim)); + indicatorAxis.scale.unionExtentFromData(data, indicatorAxis.dim); }); }, this); diff --git a/src/coord/single/Single.js b/src/coord/single/Single.js index d498d6e947..46c5a46d7f 100644 --- a/src/coord/single/Single.js +++ b/src/coord/single/Single.js @@ -96,8 +96,8 @@ define(function (require) { if (seriesModel.coordinateSystem === this) { var data = seriesModel.getData(); var dim = this.dimension; - this._axis.scale.unionExtent( - data.getDataExtent(seriesModel.coordDimToDataDim(dim)) + this._axis.scale.unionExtentFromData( + data, seriesModel.coordDimToDataDim(dim) ); axisHelper.niceScaleExtent(this._axis, this._axis.model); } diff --git a/src/data/List.js b/src/data/List.js index b1f4516a9d..ab5cb23cd1 100644 --- a/src/data/List.js +++ b/src/data/List.js @@ -410,8 +410,9 @@ define(function (require) { * Get extent of data in one dimension * @param {string} dim * @param {boolean} stack + * @param {Function} filter */ - listProto.getDataExtent = function (dim, stack) { + listProto.getDataExtent = function (dim, stack, filter) { dim = this.getDimension(dim); var dimData = this._storage[dim]; var dimInfo = this.getDimensionInfo(dim); @@ -432,8 +433,10 @@ define(function (require) { // if (isOrdinal && typeof value === 'string') { // value = zrUtil.indexOf(dimData, value); // } - value < min && (min = value); - value > max && (max = value); + if (!filter || filter(value, dim, i)) { + value < min && (min = value); + value > max && (max = value); + } } return (this._extent[dim + !!stack] = [min, max]); } diff --git a/src/scale/Log.js b/src/scale/Log.js index 847dfe353e..1751a70e84 100644 --- a/src/scale/Log.js +++ b/src/scale/Log.js @@ -113,6 +113,15 @@ define(function (require) { scaleProto.unionExtent.call(this, extent); }, + /** + * @override + */ + unionExtentFromData: function (data, dim) { + this.unionExtent(data.getDataExtent(dim, true, function (val) { + return val > 0; + })); + }, + /** * Update interval and extent of intervals for nice ticks * @param {number} [approxTickNum = 10] Given approx tick number diff --git a/src/scale/Ordinal.js b/src/scale/Ordinal.js index ba2f20150f..0899faad05 100644 --- a/src/scale/Ordinal.js +++ b/src/scale/Ordinal.js @@ -80,6 +80,13 @@ define(function (require) { return this._extent[1] - this._extent[0] + 1; }, + /** + * @override + */ + unionExtentFromData: function (data, dim) { + this.unionExtent(data.getDataExtent(dim, false)); + }, + niceTicks: zrUtil.noop, niceExtent: zrUtil.noop }); diff --git a/src/scale/Scale.js b/src/scale/Scale.js index ea4e0b0e75..a9150a6d27 100644 --- a/src/scale/Scale.js +++ b/src/scale/Scale.js @@ -79,6 +79,15 @@ define(function (require) { // this.setExtent(extent[0], extent[1]); }; + /** + * Set extent from data + * @param {module:echarts/data/List} data + * @param {string} dim + */ + scaleProto.unionExtentFromData = function (data, dim) { + this.unionExtent(data.getDataExtent(dim, true)); + }; + /** * Get extent * @return {Array.}