From 6d3114b16669625ba093df79afcc30cd447f4fc6 Mon Sep 17 00:00:00 2001 From: sushuang Date: Fri, 27 Apr 2018 02:57:27 +0800 Subject: [PATCH] Fix axis extent when stack series exists. --- src/chart/line/helper.js | 4 +- src/component/marker/markerHelper.js | 2 +- src/coord/cartesian/Grid.js | 8 +- src/coord/polar/polarCreator.js | 10 +- src/data/helper/dataStackHelper.js | 28 +++- src/helper.js | 9 +- src/layout/barGrid.js | 2 +- src/layout/barPolar.js | 2 +- src/layout/points.js | 4 +- test/area-stack.html | 210 +++++++++++++++++++++++++-- 10 files changed, 246 insertions(+), 33 deletions(-) diff --git a/src/chart/line/helper.js b/src/chart/line/helper.js index 316980bbf..46f4966e7 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 830d263b5..6e9caffb5 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 6ce581295..a98181c44 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 2c96c1045..d8f93e85d 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 64e185dfb..e470edc2b 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 0807fc97a..c7066c0e7 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 adf31e5e5..e5ca44d2d 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 9d46ebe0f..a08e022be 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 485e23be4..d8ee94048 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 8d6d81d3e..bfef3a157 100644 --- a/test/area-stack.html +++ b/test/area-stack.html @@ -1,30 +1,40 @@ - + + + + + -
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file -- GitLab