88 lines
2.0 KiB
JavaScript
88 lines
2.0 KiB
JavaScript
![]() |
/**
|
||
|
* @fileOverview 计算分类的的坐标点
|
||
|
* @author dxq613@gmail.com
|
||
|
*/
|
||
|
var each = require('@antv/util/lib/each');
|
||
|
|
||
|
var MAX_COUNT = 8;
|
||
|
var SUB_COUNT = 4; // 控制个数不能过小
|
||
|
|
||
|
function getSimpleArray(data) {
|
||
|
var arr = [];
|
||
|
each(data, function (sub) {
|
||
|
arr = arr.concat(sub);
|
||
|
});
|
||
|
return arr;
|
||
|
}
|
||
|
|
||
|
function getGreatestFactor(count, number) {
|
||
|
var i;
|
||
|
|
||
|
for (i = number; i > 0; i--) {
|
||
|
if (count % i === 0) {
|
||
|
break;
|
||
|
}
|
||
|
} // 如果是素数,没有可以整除的数字
|
||
|
|
||
|
|
||
|
if (i === 1) {
|
||
|
for (i = number; i > 0; i--) {
|
||
|
if ((count - 1) % i === 0) {
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return i;
|
||
|
}
|
||
|
|
||
|
module.exports = function (info) {
|
||
|
var rst = {};
|
||
|
var ticks = [];
|
||
|
var isRounding = info.isRounding;
|
||
|
var categories = getSimpleArray(info.data);
|
||
|
var length = categories.length;
|
||
|
var maxCount = info.maxCount || MAX_COUNT;
|
||
|
var tickCount;
|
||
|
|
||
|
if (isRounding) {
|
||
|
// 取整操作
|
||
|
tickCount = getGreatestFactor(length - 1, maxCount - 1) + 1; // 如果计算出来只有两个坐标点,则直接使用传入的 maxCount
|
||
|
|
||
|
if (tickCount === 2) {
|
||
|
tickCount = maxCount;
|
||
|
} else if (tickCount < maxCount - SUB_COUNT) {
|
||
|
tickCount = maxCount - SUB_COUNT;
|
||
|
}
|
||
|
} else {
|
||
|
tickCount = maxCount;
|
||
|
}
|
||
|
|
||
|
if (!isRounding && length <= tickCount + tickCount / 2) {
|
||
|
ticks = [].concat(categories);
|
||
|
} else {
|
||
|
var step = parseInt(length / (tickCount - 1), 10);
|
||
|
var groups = categories.map(function (e, i) {
|
||
|
return i % step === 0 ? categories.slice(i, i + step) : null;
|
||
|
}).filter(function (e) {
|
||
|
return e;
|
||
|
});
|
||
|
|
||
|
for (var i = 1, groupLen = groups.length; i < groupLen && (isRounding ? i * step < length - step : i < tickCount - 1); i++) {
|
||
|
ticks.push(groups[i][0]);
|
||
|
}
|
||
|
|
||
|
if (categories.length) {
|
||
|
ticks.unshift(categories[0]);
|
||
|
var last = categories[length - 1];
|
||
|
|
||
|
if (ticks.indexOf(last) === -1) {
|
||
|
ticks.push(last);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
rst.categories = categories;
|
||
|
rst.ticks = ticks;
|
||
|
return rst;
|
||
|
};
|