adjust.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. var _ = require("@antv/util");
  4. var constant_1 = require("../constant");
  5. var Adjust = /** @class */ (function () {
  6. function Adjust(cfg) {
  7. var xField = cfg.xField, yField = cfg.yField, _a = cfg.adjustNames, adjustNames = _a === void 0 ? ['x', 'y'] : _a, dimValuesMap = cfg.dimValuesMap;
  8. this.adjustNames = adjustNames;
  9. this.xField = xField;
  10. this.yField = yField;
  11. this.dimValuesMap = dimValuesMap;
  12. }
  13. /**
  14. * 查看维度是否是 adjust 字段
  15. * @param dim
  16. */
  17. Adjust.prototype.isAdjust = function (dim) {
  18. return this.adjustNames.indexOf(dim) >= 0;
  19. };
  20. Adjust.prototype.getAdjustRange = function (dim, dimValue, values) {
  21. var yField = this.yField;
  22. var index = values.indexOf(dimValue);
  23. var length = values.length;
  24. var pre;
  25. var next;
  26. // 没有 y 字段,但是需要根据 y 调整
  27. if (!yField && this.isAdjust('y')) {
  28. pre = 0;
  29. next = 1;
  30. }
  31. else if (length > 1) {
  32. // 如果以其开头,则取之,否则取他前面一个
  33. pre = values[index === 0 ? 0 : index - 1];
  34. // 如果以其结尾,则取之,否则取他后面一个
  35. next = values[index === length - 1 ? length - 1 : index + 1];
  36. if (index !== 0) {
  37. pre += (dimValue - pre) / 2;
  38. }
  39. else {
  40. pre -= (next - dimValue) / 2;
  41. }
  42. if (index !== length - 1) {
  43. next -= (next - dimValue) / 2;
  44. }
  45. else {
  46. next += (dimValue - values[length - 2]) / 2;
  47. }
  48. }
  49. else {
  50. pre = dimValue === 0 ? 0 : dimValue - 0.5;
  51. next = dimValue === 0 ? 1 : dimValue + 0.5;
  52. }
  53. return {
  54. pre: pre,
  55. next: next,
  56. };
  57. };
  58. Adjust.prototype.adjustData = function (groupedDataArray, mergedData) {
  59. var _this = this;
  60. // 所有调整维度的值数组
  61. var dimValuesMap = this.getDimValues(mergedData);
  62. // 按照每一个分组来进行调整
  63. _.each(groupedDataArray, function (dataArray, index) {
  64. // 遍历所有数据集合
  65. // 每个分组中,分别按照不同的 dim 进行调整
  66. _.each(dimValuesMap, function (values, dim) {
  67. // 根据不同的度量分别调整位置
  68. _this.adjustDim(dim, values, dataArray, index);
  69. });
  70. });
  71. };
  72. /**
  73. * 对数据进行分组adjustData
  74. * @param data 数据
  75. * @param dim 分组的字段
  76. * @return 分组结果
  77. */
  78. Adjust.prototype.groupData = function (data, dim) {
  79. // 补齐数据空数据为默认值
  80. _.each(data, function (record) {
  81. if (record[dim] === undefined) {
  82. record[dim] = constant_1.DEFAULT_Y;
  83. }
  84. });
  85. // 按照 dim 维度分组
  86. return _.groupBy(data, dim);
  87. };
  88. /** @override */
  89. Adjust.prototype.adjustDim = function (dim, values, data, index) { };
  90. /**
  91. * 获取可调整度量对应的值
  92. * @param mergedData 数据
  93. * @return 值的映射
  94. */
  95. Adjust.prototype.getDimValues = function (mergedData) {
  96. var _a = this, xField = _a.xField, yField = _a.yField;
  97. var dimValuesMap = _.assign({}, this.dimValuesMap);
  98. // 所有的维度
  99. var dims = [];
  100. if (xField && this.isAdjust('x')) {
  101. dims.push(xField);
  102. }
  103. if (yField && this.isAdjust('y')) {
  104. dims.push(yField);
  105. }
  106. dims.forEach(function (dim) {
  107. if (dimValuesMap && dimValuesMap[dim]) {
  108. return;
  109. }
  110. // 在每个维度上,所有的值
  111. dimValuesMap[dim] = _.valuesOfKey(mergedData, dim).sort(function (v1, v2) { return v1 - v2; });
  112. });
  113. // 只有一维的情况下,同时调整 y,赋予默认值
  114. if (!yField && this.isAdjust('y')) {
  115. var dim = 'y';
  116. dimValuesMap[dim] = [constant_1.DEFAULT_Y, 1]; // 默认分布在 y 轴的 0 与 1 之间
  117. }
  118. return dimValuesMap;
  119. };
  120. return Adjust;
  121. }());
  122. exports.default = Adjust;
  123. //# sourceMappingURL=adjust.js.map