stack.js 4.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. var tslib_1 = require("tslib");
  4. var _ = require("@antv/util");
  5. var adjust_1 = require("./adjust");
  6. var Cache = _.Cache;
  7. var Stack = /** @class */ (function (_super) {
  8. tslib_1.__extends(Stack, _super);
  9. function Stack(cfg) {
  10. var _this = _super.call(this, cfg) || this;
  11. 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;
  12. _this.adjustNames = adjustNames;
  13. _this.height = height;
  14. _this.size = size;
  15. _this.reverseOrder = reverseOrder;
  16. return _this;
  17. }
  18. /**
  19. * 方法入参是经过数据分组、数据数字化之后的二维数组
  20. * @param groupDataArray 分组之后的数据
  21. */
  22. Stack.prototype.process = function (groupDataArray) {
  23. var _a = this, yField = _a.yField, reverseOrder = _a.reverseOrder;
  24. // 如果有指定 y 字段,那么按照 y 字段来 stack
  25. // 否则,按照高度均分
  26. var d = yField ? this.processStack(groupDataArray) : this.processOneDimStack(groupDataArray);
  27. return reverseOrder ? this.reverse(d) : d;
  28. };
  29. Stack.prototype.reverse = function (groupedDataArray) {
  30. return groupedDataArray.slice(0).reverse();
  31. };
  32. Stack.prototype.processStack = function (groupDataArray) {
  33. var _a = this, xField = _a.xField, yField = _a.yField, reverseOrder = _a.reverseOrder;
  34. // 层叠顺序翻转
  35. var groupedDataArray = reverseOrder ? this.reverse(groupDataArray) : groupDataArray;
  36. // 用来缓存,正数和负数的堆叠问题
  37. var positive = new Cache();
  38. var negative = new Cache();
  39. return groupedDataArray.map(function (dataArray) {
  40. return dataArray.map(function (data) {
  41. var _a;
  42. var x = _.get(data, xField, 0);
  43. var y = _.get(data, [yField]);
  44. var xKey = x.toString();
  45. // todo 是否应该取 _origin?因为 y 可能取到的值不正确,比如先 symmetric,再 stack!
  46. y = _.isArray(y) ? y[1] : y;
  47. if (!_.isNil(y)) {
  48. var cache = y >= 0 ? positive : negative;
  49. if (!cache.has(xKey)) {
  50. cache.set(xKey, 0);
  51. }
  52. var xValue = cache.get(xKey);
  53. var newXValue = y + xValue;
  54. // 存起来
  55. cache.set(xKey, newXValue);
  56. return tslib_1.__assign(tslib_1.__assign({}, data), (_a = {}, _a[yField] = [xValue, newXValue], _a));
  57. }
  58. // 没有修改,则直接返回
  59. return data;
  60. });
  61. });
  62. };
  63. Stack.prototype.processOneDimStack = function (groupDataArray) {
  64. var _this = this;
  65. var _a = this, xField = _a.xField, height = _a.height, reverseOrder = _a.reverseOrder;
  66. var yField = 'y';
  67. // 如果层叠的顺序翻转
  68. var groupedDataArray = reverseOrder ? this.reverse(groupDataArray) : groupDataArray;
  69. // 缓存累加数据
  70. var cache = new Cache();
  71. return groupedDataArray.map(function (dataArray) {
  72. return dataArray.map(function (data) {
  73. var _a;
  74. var size = _this.size;
  75. var xValue = data[xField];
  76. // todo 没有看到这个 stack 计算原理
  77. var stackHeight = (size * 2) / height;
  78. if (!cache.has(xValue)) {
  79. cache.set(xValue, stackHeight / 2); // 初始值大小
  80. }
  81. var stackValue = cache.get(xValue);
  82. // 增加一层 stackHeight
  83. cache.set(xValue, stackValue + stackHeight);
  84. return tslib_1.__assign(tslib_1.__assign({}, data), (_a = {}, _a[yField] = stackValue, _a));
  85. });
  86. });
  87. };
  88. return Stack;
  89. }(adjust_1.default));
  90. exports.default = Stack;
  91. //# sourceMappingURL=stack.js.map