123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- var DEFAULT_Y = 0; // 默认的y的值
- var each = require('@antv/util/lib/each');
- var ArrayUtil = {
- values: require('@antv/util/lib/array/values-of-key')
- };
- module.exports = {
- /**
- * 对应的维度是否可以调整
- * @protected
- * @param {String} dimName 可以调整的维度 x,y
- * @return {Boolean} 是否可以调整
- */
- isAdjust: function isAdjust(dimName) {
- return this.adjustNames.indexOf(dimName) >= 0;
- },
- /**
- * @protected
- * 获取可调整度量对应的值
- * @param {Frame} mergeData 数据
- * @return {Object} 值的映射
- */
- _getDimValues: function _getDimValues(mergeData) {
- var self = this;
- var valuesMap = {};
- var dims = [];
- if (self.xField && self.isAdjust('x')) {
- dims.push(self.xField);
- }
- if (self.yField && self.isAdjust('y')) {
- dims.push(self.yField);
- }
- each(dims, function (dim) {
- var values = ArrayUtil.values(mergeData, dim);
- values.sort(function (v1, v2) {
- return v1 - v2;
- });
- valuesMap[dim] = values;
- });
- if (!self.yField && self.isAdjust('y')) {
- // 只有一维的情况下,同时调整y
- var dim = 'y';
- var values = [DEFAULT_Y, 1]; // 默认分布在y轴的 0.1 与 0.2 之间
- valuesMap[dim] = values;
- }
- return valuesMap;
- },
- adjustData: function adjustData(dataArray, mergeData) {
- var self = this;
- var valuesMap = self._getDimValues(mergeData);
- each(dataArray, function (data, index) {
- // 遍历所有数据集合
- each(valuesMap, function (values, dim) {
- // 根据不同的度量分别调整位置
- self.adjustDim(dim, values, data, dataArray.length, index);
- });
- });
- },
- getAdjustRange: function getAdjustRange(dim, key, values) {
- var self = this;
- var index = values.indexOf(key);
- var length = values.length;
- var pre;
- var next;
- if (!self.yField && self.isAdjust('y')) {
- pre = 0;
- next = 1;
- } else if (length > 1) {
- pre = index === 0 ? values[0] : values[index - 1];
- next = index === length - 1 ? values[length - 1] : values[index + 1];
- if (index !== 0) {
- pre += (key - pre) / 2;
- } else {
- pre -= (next - key) / 2;
- }
- if (index !== length - 1) {
- next -= (next - key) / 2;
- } else {
- next += (key - values[length - 2]) / 2;
- }
- } else {
- pre = key === 0 ? 0 : key - 0.5;
- next = key === 0 ? 1 : key + 0.5;
- }
- return {
- pre: pre,
- next: next
- };
- },
- /**
- * 对数据进行分组
- * @param {Array} data 数据
- * @param {String} dim 分组的字段
- * @return {Object} 分组的键值对映射
- */
- groupData: function groupData(data, dim) {
- var groups = {};
- each(data, function (record) {
- var value = record[dim];
- if (value === undefined) {
- value = record[dim] = DEFAULT_Y;
- }
- if (!groups[value]) {
- groups[value] = [];
- }
- groups[value].push(record);
- });
- return groups;
- }
- };
|