12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var tslib_1 = require("tslib");
- var _ = require("@antv/util");
- var adjust_1 = require("./adjust");
- var Cache = _.Cache;
- var Stack = /** @class */ (function (_super) {
- tslib_1.__extends(Stack, _super);
- function Stack(cfg) {
- var _this = _super.call(this, cfg) || this;
- var _a = cfg.adjustNames, adjustNames = _a === void 0 ? ['y'] : _a, _b = cfg.height, height = _b === void 0 ? NaN : _b, _c = cfg.size, size = _c === void 0 ? 10 : _c, _d = cfg.reverseOrder, reverseOrder = _d === void 0 ? false : _d;
- _this.adjustNames = adjustNames;
- _this.height = height;
- _this.size = size;
- _this.reverseOrder = reverseOrder;
- return _this;
- }
- /**
- * 方法入参是经过数据分组、数据数字化之后的二维数组
- * @param groupDataArray 分组之后的数据
- */
- Stack.prototype.process = function (groupDataArray) {
- var _a = this, yField = _a.yField, reverseOrder = _a.reverseOrder;
- // 如果有指定 y 字段,那么按照 y 字段来 stack
- // 否则,按照高度均分
- var d = yField ? this.processStack(groupDataArray) : this.processOneDimStack(groupDataArray);
- return reverseOrder ? this.reverse(d) : d;
- };
- Stack.prototype.reverse = function (groupedDataArray) {
- return groupedDataArray.slice(0).reverse();
- };
- Stack.prototype.processStack = function (groupDataArray) {
- var _a = this, xField = _a.xField, yField = _a.yField, reverseOrder = _a.reverseOrder;
- // 层叠顺序翻转
- var groupedDataArray = reverseOrder ? this.reverse(groupDataArray) : groupDataArray;
- // 用来缓存,正数和负数的堆叠问题
- var positive = new Cache();
- var negative = new Cache();
- return groupedDataArray.map(function (dataArray) {
- return dataArray.map(function (data) {
- var _a;
- var x = _.get(data, xField, 0);
- var y = _.get(data, [yField]);
- var xKey = x.toString();
- // todo 是否应该取 _origin?因为 y 可能取到的值不正确,比如先 symmetric,再 stack!
- y = _.isArray(y) ? y[1] : y;
- if (!_.isNil(y)) {
- var cache = y >= 0 ? positive : negative;
- if (!cache.has(xKey)) {
- cache.set(xKey, 0);
- }
- var xValue = cache.get(xKey);
- var newXValue = y + xValue;
- // 存起来
- cache.set(xKey, newXValue);
- return tslib_1.__assign(tslib_1.__assign({}, data), (_a = {}, _a[yField] = [xValue, newXValue], _a));
- }
- // 没有修改,则直接返回
- return data;
- });
- });
- };
- Stack.prototype.processOneDimStack = function (groupDataArray) {
- var _this = this;
- var _a = this, xField = _a.xField, height = _a.height, reverseOrder = _a.reverseOrder;
- var yField = 'y';
- // 如果层叠的顺序翻转
- var groupedDataArray = reverseOrder ? this.reverse(groupDataArray) : groupDataArray;
- // 缓存累加数据
- var cache = new Cache();
- return groupedDataArray.map(function (dataArray) {
- return dataArray.map(function (data) {
- var _a;
- var size = _this.size;
- var xValue = data[xField];
- // todo 没有看到这个 stack 计算原理
- var stackHeight = (size * 2) / height;
- if (!cache.has(xValue)) {
- cache.set(xValue, stackHeight / 2); // 初始值大小
- }
- var stackValue = cache.get(xValue);
- // 增加一层 stackHeight
- cache.set(xValue, stackValue + stackHeight);
- return tslib_1.__assign(tslib_1.__assign({}, data), (_a = {}, _a[yField] = stackValue, _a));
- });
- });
- };
- return Stack;
- }(adjust_1.default));
- exports.default = Stack;
- //# sourceMappingURL=stack.js.map
|