@antv/f2
Version:
Charts for mobile visualization.
56 lines (55 loc) • 1.92 kB
JavaScript
import { __extends } from "tslib";
import { clone, flatten, each } from '@antv/util';
import { GAP } from '../constant';
import Adjust from './adjust';
function randomNumber(min, max) {
return (max - min) * Math.random() + min;
}
var Jitter = /** @class */function (_super) {
__extends(Jitter, _super);
function Jitter() {
return _super !== null && _super.apply(this, arguments) || this;
}
Jitter.prototype.process = function (groupDataArray) {
var groupedDataArray = clone(groupDataArray);
// 之前分组之后的数据,然后有合并回去(和分组前可以理解成是一样的)
var mergeData = flatten(groupedDataArray);
// 返回值
this.adjustData(groupedDataArray, mergeData);
return groupedDataArray;
};
/**
* 当前数据分组(index)中,按照维度 dim 进行 jitter 调整
* @param dim
* @param values
* @param dataArray
*/
Jitter.prototype.adjustDim = function (dim, values, dataArray) {
var _this = this;
// 在每一个分组中,将数据再按照 dim 分组,用于散列
var groupDataArray = this.groupData(dataArray, dim);
return each(groupDataArray, function (data, dimValue) {
return _this.adjustGroup(data, dim, parseFloat(dimValue), values);
});
};
// 随机出来的字段值
Jitter.prototype.getAdjustOffset = function (range) {
var pre = range.pre,
next = range.next;
// 随机的范围
var margin = (next - pre) * GAP;
return randomNumber(pre + margin, next - margin);
};
// adjust group data
Jitter.prototype.adjustGroup = function (group, dim, dimValue, values) {
var _this = this;
// 调整范围
var range = this.getAdjustRange(dim, dimValue, values);
each(group, function (data) {
data[dim] = _this.getAdjustOffset(range); // 获取调整的位置
});
return group;
};
return Jitter;
}(Adjust);
export default Jitter;