diff --git a/src/chart/line/helper.js b/src/chart/line/helper.js index 316980bbf84acac6e5358b4b4e7ab47406cb990a..46f4966e7351fec7fed4d823ee9bbd97c3477e41 100644 --- a/src/chart/line/helper.js +++ b/src/chart/line/helper.js @@ -42,10 +42,10 @@ export function prepareDataCoordInfo(coordSys, data, valueOrigin) { var stacked; var stackResultDim = data.getCalculationInfo('stackResultDimension'); - if (stacked |= isDimensionStacked(data, dims[0], dims[1])) { // jshint ignore:line + if (stacked |= isDimensionStacked(data, dims[0] /*, dims[1]*/)) { // jshint ignore:line dims[0] = stackResultDim; } - if (stacked |= isDimensionStacked(data, dims[1], dims[0])) { // jshint ignore:line + if (stacked |= isDimensionStacked(data, dims[1] /*, dims[0]*/)) { // jshint ignore:line dims[1] = stackResultDim; } diff --git a/src/component/marker/markerHelper.js b/src/component/marker/markerHelper.js index 830d263b587a7f6f0c3def35187441048e18d2a0..6e9caffb5294198bea12d2d6fdf0ed40755068a6 100644 --- a/src/component/marker/markerHelper.js +++ b/src/component/marker/markerHelper.js @@ -60,7 +60,7 @@ function markerTypeCalculatorWithExtent( ) { var coordArr = []; - var stacked = isDimensionStacked(data, targetDataDim, otherDataDim); + var stacked = isDimensionStacked(data, targetDataDim /*, otherDataDim*/); var calcDataDim = stacked ? data.getCalculationInfo('stackResultDimension') : targetDataDim; diff --git a/src/coord/cartesian/Grid.js b/src/coord/cartesian/Grid.js index 6ce581295f4a717c99bb25d83c8eda945e3326db..a98181c4439205f63c3747a983c4ba72ebfb8600 100644 --- a/src/coord/cartesian/Grid.js +++ b/src/coord/cartesian/Grid.js @@ -35,6 +35,7 @@ import { import Cartesian2D from './Cartesian2D'; import Axis2D from './Axis2D'; import CoordinateSystem from '../../CoordinateSystem'; +import {getStackedDimension} from '../../data/helper/dataStackHelper'; // Depends on GridModel, AxisModel, which performs preprocess. import './GridModel'; @@ -491,7 +492,12 @@ gridProto._updateScale = function (ecModel, gridModel) { function unionExtent(data, axis, seriesModel) { each(data.mapDimension(axis.dim, true), function (dim) { - axis.scale.unionExtentFromData(data, dim); + axis.scale.unionExtentFromData( + // For example, the extent of the orginal dimension + // is [0.1, 0.5], the extent of the `stackResultDimension` + // is [7, 9], the final extent should not include [0.1, 0.5]. + data, getStackedDimension(data, dim) + ); }); } }; diff --git a/src/coord/polar/polarCreator.js b/src/coord/polar/polarCreator.js index 2c96c10451ae2b77348261a234ffc5a3e0133b63..d8f93e85df13e7b54a63322d5b62e7b19573b8e1 100644 --- a/src/coord/polar/polarCreator.js +++ b/src/coord/polar/polarCreator.js @@ -28,8 +28,8 @@ import { niceScaleExtent } from '../../coord/axisHelper'; import CoordinateSystem from '../../CoordinateSystem'; +import {getStackedDimension} from '../../data/helper/dataStackHelper'; -// 依赖 PolarModel 做预处理 import './PolarModel'; /** @@ -68,10 +68,14 @@ function updatePolarScale(ecModel, api) { if (seriesModel.coordinateSystem === polar) { var data = seriesModel.getData(); zrUtil.each(data.mapDimension('radius', true), function (dim) { - radiusAxis.scale.unionExtentFromData(data, dim); + radiusAxis.scale.unionExtentFromData( + data, getStackedDimension(data, dim) + ); }); zrUtil.each(data.mapDimension('angle', true), function (dim) { - angleAxis.scale.unionExtentFromData(data, dim); + angleAxis.scale.unionExtentFromData( + data, getStackedDimension(data, dim) + ); }); } }); diff --git a/src/data/helper/dataStackHelper.js b/src/data/helper/dataStackHelper.js index 64e185dfb29b790455f96eb1336c40642dd1e1d5..e470edc2bd942f9523297cdfac313bcac5d59f29 100644 --- a/src/data/helper/dataStackHelper.js +++ b/src/data/helper/dataStackHelper.js @@ -130,15 +130,27 @@ export function enableDataStack(seriesModel, dimensionInfoList, opt) { /** * @param {module:echarts/data/List} data * @param {string} stackedDim + */ +export function isDimensionStacked(data, stackedDim /*, stackedByDim*/) { + // Each single series only maps to one pair of axis. So we do not need to + // check stackByDim, whatever stacked by a dimension or stacked by index. + return !!stackedDim && stackedDim === data.getCalculationInfo('stackedDimension'); + // && ( + // stackedByDim != null + // ? stackedByDim === data.getCalculationInfo('stackedByDimension') + // : data.getCalculationInfo('isStackedByIndex') + // ); +} + +/** + * @param {module:echarts/data/List} data + * @param {string} targetDim * @param {string} [stackedByDim] If not input this parameter, check whether * stacked by index. + * @return {string} dimension */ -export function isDimensionStacked(data, stackedDim, stackedByDim) { - return stackedDim - && stackedDim === data.getCalculationInfo('stackedDimension') - && ( - stackedByDim != null - ? stackedByDim === data.getCalculationInfo('stackedByDimension') - : data.getCalculationInfo('isStackedByIndex') - ); +export function getStackedDimension(data, targetDim) { + return isDimensionStacked(data, targetDim) + ? data.getCalculationInfo('stackResultDimension') + : targetDim; } diff --git a/src/helper.js b/src/helper.js index 0807fc97a164e9141c4ff5a0bb079d4601beb2ff..c7066c0e7f3fe8f1624b28495d6bdebca7eb151b 100644 --- a/src/helper.js +++ b/src/helper.js @@ -24,7 +24,11 @@ import * as axisHelper from './coord/axisHelper'; import axisModelCommonMixin from './coord/axisModelCommonMixin'; import Model from './model/Model'; import {getLayoutRect} from './util/layout'; -import {enableDataStack, isDimensionStacked} from './data/helper/dataStackHelper'; +import { + enableDataStack, + isDimensionStacked, + getStackedDimension +} from './data/helper/dataStackHelper'; /** * Create a muti dimension List structure from seriesModel. @@ -52,7 +56,8 @@ export {default as createDimensions} from './data/helper/createDimensions'; export var dataStack = { isDimensionStacked: isDimensionStacked, - enableDataStack: enableDataStack + enableDataStack: enableDataStack, + getStackedDimension: getStackedDimension }; /** diff --git a/src/layout/barGrid.js b/src/layout/barGrid.js index adf31e5e5ac1e1a5a6697cd536dc8224b22fd9c1..e5ca44d2d51590906b0286475917fedb96caae6d 100644 --- a/src/layout/barGrid.js +++ b/src/layout/barGrid.js @@ -284,7 +284,7 @@ export function layout(seriesType, ecModel) { var valueDim = data.mapDimension(valueAxis.dim); var baseDim = data.mapDimension(baseAxis.dim); - var stacked = isDimensionStacked(data, valueDim, baseDim); + var stacked = isDimensionStacked(data, valueDim /*, baseDim*/); var isValueAxisH = valueAxis.isHorizontal(); var valueAxisStart = getValueAxisStart(baseAxis, valueAxis, stacked); diff --git a/src/layout/barPolar.js b/src/layout/barPolar.js index 9d46ebe0fc238e4922eb41317c8307503f6b3eb7..a08e022be00f31988682e6cf09f8a00c7986811b 100644 --- a/src/layout/barPolar.js +++ b/src/layout/barPolar.js @@ -81,7 +81,7 @@ function barLayoutPolar(seriesType, ecModel, api) { var valueDim = data.mapDimension(valueAxis.dim); var baseDim = data.mapDimension(baseAxis.dim); - var stacked = isDimensionStacked(data, valueDim, baseDim); + var stacked = isDimensionStacked(data, valueDim /*, baseDim*/); var valueAxisStart = valueAxis.getExtent()[0]; diff --git a/src/layout/points.js b/src/layout/points.js index 485e23be424c5e19f6b511eeb31a15291dfef91f..d8ee940480a6601c2dce1b3a94e915007cdde8c1 100644 --- a/src/layout/points.js +++ b/src/layout/points.js @@ -43,10 +43,10 @@ export default function (seriesType) { var dimLen = dims.length; var stackResultDim = data.getCalculationInfo('stackResultDimension'); - if (isDimensionStacked(data, dims[0], dims[1])) { + if (isDimensionStacked(data, dims[0] /*, dims[1]*/)) { dims[0] = stackResultDim; } - if (isDimensionStacked(data, dims[1], dims[0])) { + if (isDimensionStacked(data, dims[1] /*, dims[0]*/)) { dims[1] = stackResultDim; } diff --git a/test/area-stack.html b/test/area-stack.html index 8d6d81d3e9c54e71177c49489143f1d75e7f59a0..bfef3a157a616b2615b44bfae67c4a67ca507211 100644 --- a/test/area-stack.html +++ b/test/area-stack.html @@ -1,30 +1,40 @@ - + + + + + -
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file