jitter.js 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import { __extends } from "tslib";
  2. import * as _ from '@antv/util';
  3. import { GAP } from '../constant';
  4. import Adjust from './adjust';
  5. function randomNumber(min, max) {
  6. return (max - min) * Math.random() + min;
  7. }
  8. var Jitter = /** @class */ (function (_super) {
  9. __extends(Jitter, _super);
  10. function Jitter() {
  11. return _super !== null && _super.apply(this, arguments) || this;
  12. }
  13. Jitter.prototype.process = function (groupDataArray) {
  14. var groupedDataArray = _.clone(groupDataArray);
  15. // 之前分组之后的数据,然后有合并回去(和分组前可以理解成是一样的)
  16. var mergeData = _.flatten(groupedDataArray);
  17. // 返回值
  18. this.adjustData(groupedDataArray, mergeData);
  19. return groupedDataArray;
  20. };
  21. /**
  22. * 当前数据分组(index)中,按照维度 dim 进行 jitter 调整
  23. * @param dim
  24. * @param values
  25. * @param dataArray
  26. */
  27. Jitter.prototype.adjustDim = function (dim, values, dataArray) {
  28. var _this = this;
  29. // 在每一个分组中,将数据再按照 dim 分组,用于散列
  30. var groupDataArray = this.groupData(dataArray, dim);
  31. return _.each(groupDataArray, function (data, dimValue) {
  32. return _this.adjustGroup(data, dim, parseFloat(dimValue), values);
  33. });
  34. };
  35. // 随机出来的字段值
  36. Jitter.prototype.getAdjustOffset = function (range) {
  37. var pre = range.pre, next = range.next;
  38. // 随机的范围
  39. var margin = (next - pre) * GAP;
  40. return randomNumber(pre + margin, next - margin);
  41. };
  42. // adjust group data
  43. Jitter.prototype.adjustGroup = function (group, dim, dimValue, values) {
  44. var _this = this;
  45. // 调整范围
  46. var range = this.getAdjustRange(dim, dimValue, values);
  47. _.each(group, function (data) {
  48. data[dim] = _this.getAdjustOffset(range); // 获取调整的位置
  49. });
  50. return group;
  51. };
  52. return Jitter;
  53. }(Adjust));
  54. export default Jitter;
  55. //# sourceMappingURL=jitter.js.map