123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- var ArrayUtil = {
- merge: require('@antv/util/lib/array/merge'),
- values: require('@antv/util/lib/array/values-of-key')
- };
- var group = require('@antv/util/lib/group');
- var each = require('@antv/util/lib/each');
- module.exports = {
- /**
- * @protected
- * @override
- */
- processAdjust: function processAdjust(dataArray) {
- var self = this;
- var mergeData = ArrayUtil.merge(dataArray);
- var dodgeDim = self.dodgeBy;
- var adjDataArray = dataArray;
- if (dodgeDim) {
- // 如果指定了分组dim的字段
- adjDataArray = group(mergeData, dodgeDim);
- }
- self.cacheMap = {};
- self.adjDataArray = adjDataArray;
- self.mergeData = mergeData;
- self.adjustData(adjDataArray, mergeData);
- self.adjDataArray = null;
- self.mergeData = null;
- },
- getDistribution: function getDistribution(dim) {
- var self = this;
- var dataArray = self.adjDataArray;
- var cacheMap = self.cacheMap;
- var map = cacheMap[dim];
- if (!map) {
- map = {};
- each(dataArray, function (data, index) {
- var values = ArrayUtil.values(data, dim);
- if (!values.length) {
- values.push(0);
- }
- each(values, function (val) {
- if (!map[val]) {
- map[val] = [];
- }
- map[val].push(index);
- });
- });
- cacheMap[dim] = map;
- }
- return map;
- },
- adjustDim: function adjustDim(dim, values, data, frameCount, frameIndex) {
- var self = this;
- var map = self.getDistribution(dim);
- var groupData = self.groupData(data, dim); // 根据值分组
- each(groupData, function (group, key) {
- key = parseFloat(key);
- var range;
- if (values.length === 1) {
- range = {
- pre: values[0] - 1,
- next: values[0] + 1
- };
- } else {
- range = self.getAdjustRange(dim, key, values);
- }
- each(group, function (record) {
- var value = record[dim];
- var valueArr = map[value];
- var valIndex = valueArr.indexOf(frameIndex);
- record[dim] = self.getDodgeOffset(range, valIndex, valueArr.length);
- });
- });
- }
- };
|