stack.js 4.0 KB

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