UNPKG

cione-comp-lib

Version:

`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`

70 lines (69 loc) 2.98 kB
import { createHashMap, each } from "../../../zrender/lib/core/util.mjs"; import { addSafe } from "../util/number.mjs"; function dataStack(ecModel) { var stackInfoMap = createHashMap(); ecModel.eachSeries(function(seriesModel) { var stack = seriesModel.get("stack"); if (stack) { var stackInfoList = stackInfoMap.get(stack) || stackInfoMap.set(stack, []); var data = seriesModel.getData(); var stackInfo = { stackResultDimension: data.getCalculationInfo("stackResultDimension"), stackedOverDimension: data.getCalculationInfo("stackedOverDimension"), stackedDimension: data.getCalculationInfo("stackedDimension"), stackedByDimension: data.getCalculationInfo("stackedByDimension"), isStackedByIndex: data.getCalculationInfo("isStackedByIndex"), data, seriesModel }; if (!stackInfo.stackedDimension || !(stackInfo.isStackedByIndex || stackInfo.stackedByDimension)) { return; } stackInfoList.length && data.setCalculationInfo("stackedOnSeries", stackInfoList[stackInfoList.length - 1].seriesModel); stackInfoList.push(stackInfo); } }); stackInfoMap.each(calculateStack); } function calculateStack(stackInfoList) { each(stackInfoList, function(targetStackInfo, idxInStack) { var resultVal = []; var resultNaN = [NaN, NaN]; var dims = [targetStackInfo.stackResultDimension, targetStackInfo.stackedOverDimension]; var targetData = targetStackInfo.data; var isStackedByIndex = targetStackInfo.isStackedByIndex; var stackStrategy = targetStackInfo.seriesModel.get("stackStrategy") || "samesign"; targetData.modify(dims, function(v0, v1, dataIndex) { var sum = targetData.get(targetStackInfo.stackedDimension, dataIndex); if (isNaN(sum)) { return resultNaN; } var byValue; var stackedDataRawIndex; if (isStackedByIndex) { stackedDataRawIndex = targetData.getRawIndex(dataIndex); } else { byValue = targetData.get(targetStackInfo.stackedByDimension, dataIndex); } var stackedOver = NaN; for (var j = idxInStack - 1; j >= 0; j--) { var stackInfo = stackInfoList[j]; if (!isStackedByIndex) { stackedDataRawIndex = stackInfo.data.rawIndexOf(stackInfo.stackedByDimension, byValue); } if (stackedDataRawIndex >= 0) { var val = stackInfo.data.getByRawIndex(stackInfo.stackResultDimension, stackedDataRawIndex); if (stackStrategy === "all" || stackStrategy === "positive" && val > 0 || stackStrategy === "negative" && val < 0 || stackStrategy === "samesign" && sum >= 0 && val > 0 || stackStrategy === "samesign" && sum <= 0 && val < 0) { sum = addSafe(sum, val); stackedOver = val; break; } } } resultVal[0] = sum; resultVal[1] = stackedOver; return resultVal; }); }); } export { dataStack as default };