UNPKG

1.7 kBJavaScriptView Raw
1const each = require('@antv/util/lib/each');
2const mix = require('@antv/util/lib/mix');
3const ArrayUtil = {
4 merge: require('@antv/util/lib/array/merge'),
5 values: require('@antv/util/lib/array/values')
6};
7
8const Adjust = require('./base');
9const AdjustMixin = require('./mixin/adjust');
10
11class Jitter extends Adjust {
12
13 _initDefaultCfg() {
14 this.xField = null; // 调整对应的 x 方向对应的字段名称
15 this.yField = null; // 调整对应的 y 方向对应的字段名称
16 this.adjustNames = [ 'x', 'y' ]; // 指x,y
17 this.groupFields = null; // 参与分组的数据维度
18 }
19
20 processAdjust(dataArray) {
21 const self = this;
22 const mergeData = ArrayUtil.merge(dataArray);
23
24 self.adjDataArray = dataArray;
25 self.mergeData = mergeData;
26 self.adjustData(dataArray, mergeData);
27 self.adjFrames = null;
28 self.mergeData = null;
29 }
30
31 getAdjustOffset(pre, next) {
32 const r = Math.random(); // 随机位置,均匀分布
33 const avg = (next - pre); // * length
34 const append = avg * 0.05;
35 return pre + append + avg * 0.9 * r;
36 }
37
38 // adjust group data
39 _adjustGroup(group, dim, key, values) {
40 const self = this;
41 const range = self.getAdjustRange(dim, key, values);
42
43 each(group, function(record) {
44 record[dim] = self.getAdjustOffset(range.pre, range.next); // 获取调整的位置
45 });
46 }
47
48 adjustDim(dim, values, data) {
49 const self = this;
50 const groupData = self.groupData(data, dim);
51 each(groupData, function(group, key) {
52 key = parseFloat(key);
53 self._adjustGroup(group, dim, key, values);
54 });
55 }
56}
57
58mix(Jitter.prototype, AdjustMixin);
59
60Adjust.Jitter = Jitter;
61module.exports = Jitter;