@antv/f2
Version:
Charts for mobile visualization.
127 lines (126 loc) • 3.88 kB
JavaScript
import { each, groupBy, valuesOfKey, assign } from '@antv/util';
import { DEFAULT_Y } from '../constant';
var Adjust = /** @class */function () {
function Adjust(cfg) {
var xField = cfg.xField,
yField = cfg.yField,
_a = cfg.adjustNames,
adjustNames = _a === void 0 ? ['x', 'y'] : _a,
dimValuesMap = cfg.dimValuesMap;
this.adjustNames = adjustNames;
this.xField = xField;
this.yField = yField;
this.dimValuesMap = dimValuesMap;
}
/**
* 查看维度是否是 adjust 字段
* @param dim
*/
Adjust.prototype.isAdjust = function (dim) {
return this.adjustNames.indexOf(dim) >= 0;
};
Adjust.prototype.getAdjustRange = function (dim, dimValue, values) {
var yField = this.yField;
var index = values.indexOf(dimValue);
var length = values.length;
var pre;
var next;
// 没有 y 字段,但是需要根据 y 调整
if (!yField && this.isAdjust('y')) {
pre = 0;
next = 1;
} else if (length > 1) {
// 如果以其开头,则取之,否则取他前面一个
pre = values[index === 0 ? 0 : index - 1];
// 如果以其结尾,则取之,否则取他后面一个
next = values[index === length - 1 ? length - 1 : index + 1];
if (index !== 0) {
pre += (dimValue - pre) / 2;
} else {
pre -= (next - dimValue) / 2;
}
if (index !== length - 1) {
next -= (next - dimValue) / 2;
} else {
next += (dimValue - values[length - 2]) / 2;
}
} else {
pre = dimValue === 0 ? 0 : dimValue - 0.5;
next = dimValue === 0 ? 1 : dimValue + 0.5;
}
return {
pre: pre,
next: next
};
};
Adjust.prototype.adjustData = function (groupedDataArray, mergedData) {
var _this = this;
// 所有调整维度的值数组
var dimValuesMap = this.getDimValues(mergedData);
// 按照每一个分组来进行调整
each(groupedDataArray, function (dataArray, index) {
// 遍历所有数据集合
// 每个分组中,分别按照不同的 dim 进行调整
each(dimValuesMap, function (values, dim) {
// 根据不同的度量分别调整位置
_this.adjustDim(dim, values, dataArray, index);
});
});
};
/**
* 对数据进行分组adjustData
* @param data 数据
* @param dim 分组的字段
* @return 分组结果
*/
Adjust.prototype.groupData = function (data, dim) {
// 补齐数据空数据为默认值
each(data, function (record) {
if (record[dim] === undefined) {
record[dim] = DEFAULT_Y;
}
});
// 按照 dim 维度分组
return groupBy(data, dim);
};
/** @override */
Adjust.prototype.adjustDim = function (_dim, _values, _data, _index) {};
/**
* 获取可调整度量对应的值
* @param mergedData 数据
* @return 值的映射
*/
Adjust.prototype.getDimValues = function (mergedData) {
var _a = this,
xField = _a.xField,
yField = _a.yField;
var dimValuesMap = assign({}, this.dimValuesMap);
// 所有的维度
var dims = [];
if (xField && this.isAdjust('x')) {
dims.push(xField);
}
if (yField && this.isAdjust('y')) {
dims.push(yField);
}
dims.forEach(function (dim) {
if (dimValuesMap && dimValuesMap[dim]) {
return;
}
// 在每个维度上,所有的值
dimValuesMap[dim] = valuesOfKey(mergedData, dim).sort(function (v1, v2) {
return v1 - v2;
}).filter(function (v) {
return !isNaN(v);
});
});
// 只有一维的情况下,同时调整 y,赋予默认值
if (!yField && this.isAdjust('y')) {
var dim = 'y';
dimValuesMap[dim] = [DEFAULT_Y, 1]; // 默认分布在 y 轴的 0 与 1 之间
}
return dimValuesMap;
};
return Adjust;
}();
export default Adjust;