1 | const each = require('@antv/util/src/each');
|
2 | const mix = require('@antv/util/src/mix');
|
3 | const ArrayUtil = {
|
4 | merge: require('@antv/util/src/array/merge'),
|
5 | values: require('@antv/util/src/array/values')
|
6 | };
|
7 |
|
8 | const Adjust = require('./base');
|
9 | const AdjustMixin = require('./mixin/adjust');
|
10 |
|
11 | class Jitter extends Adjust {
|
12 |
|
13 | _initDefaultCfg() {
|
14 | this.xField = null;
|
15 | this.yField = null;
|
16 | this.adjustNames = [ '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);
|
34 | const append = avg * 0.05;
|
35 | return pre + append + avg * 0.9 * r;
|
36 | }
|
37 |
|
38 |
|
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 |
|
58 | mix(Jitter.prototype, AdjustMixin);
|
59 |
|
60 | Adjust.Jitter = Jitter;
|
61 | module.exports = Jitter;
|