symmetric.js 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import { __assign, __extends } from "tslib";
  2. import * as _ from '@antv/util';
  3. import Adjust from './adjust';
  4. var Symmetric = /** @class */ (function (_super) {
  5. __extends(Symmetric, _super);
  6. function Symmetric() {
  7. return _super !== null && _super.apply(this, arguments) || this;
  8. }
  9. Symmetric.prototype.process = function (groupDataArray) {
  10. var mergeData = _.flatten(groupDataArray);
  11. var _a = this, xField = _a.xField, yField = _a.yField;
  12. // 每个 x 值对应的 最大值
  13. var cache = this.getXValuesMaxMap(mergeData);
  14. // 所有数据的最大的值
  15. var max = Math.max.apply(Math, Object.keys(cache).map(function (key) { return cache[key]; }));
  16. return _.map(groupDataArray, function (dataArray) {
  17. return _.map(dataArray, function (data) {
  18. var _a, _b;
  19. var yValue = data[yField];
  20. var xValue = data[xField];
  21. // 数组处理逻辑
  22. if (_.isArray(yValue)) {
  23. var off_1 = (max - cache[xValue]) / 2;
  24. return __assign(__assign({}, data), (_a = {}, _a[yField] = _.map(yValue, function (y) { return off_1 + y; }), _a));
  25. }
  26. // 非数组处理逻辑
  27. var offset = (max - yValue) / 2;
  28. return __assign(__assign({}, data), (_b = {}, _b[yField] = [offset, yValue + offset], _b));
  29. });
  30. });
  31. };
  32. // 获取每个 x 对应的最大的值
  33. Symmetric.prototype.getXValuesMaxMap = function (mergeData) {
  34. var _this = this;
  35. var _a = this, xField = _a.xField, yField = _a.yField;
  36. // 根据 xField 的值进行分组
  37. var groupDataArray = _.groupBy(mergeData, function (data) { return data[xField]; });
  38. // 获取每个 xField 值中的最大值
  39. return _.mapValues(groupDataArray, function (dataArray) { return _this.getDimMaxValue(dataArray, yField); });
  40. };
  41. Symmetric.prototype.getDimMaxValue = function (mergeData, dim) {
  42. // 所有的 value 值
  43. var dimValues = _.map(mergeData, function (data) { return _.get(data, dim, []); });
  44. // 将数组打平(dim value 有可能是数组,比如 stack 之后的)
  45. var flattenValues = _.flatten(dimValues);
  46. // 求出数组的最大值
  47. return Math.max.apply(Math, flattenValues);
  48. };
  49. return Symmetric;
  50. }(Adjust));
  51. export default Symmetric;
  52. //# sourceMappingURL=symmetric.js.map