32 lines
899 B
TypeScript
32 lines
899 B
TypeScript
import { isEmpty } from '@antv/util';
|
|
import { ScaleConfig } from '../types';
|
|
import { getLogPositiveMin, log } from '../util/math';
|
|
|
|
/**
|
|
* 计算 log 的 ticks,考虑 min = 0 的场景
|
|
* @param cfg 度量的配置项
|
|
* @returns 计算后的 ticks
|
|
*/
|
|
export default function calculateLogTicks(cfg: ScaleConfig) {
|
|
const { base, tickCount, min, max, values } = cfg;
|
|
let minTick;
|
|
const maxTick = log(base, max);
|
|
if (min > 0) {
|
|
minTick = Math.floor(log(base, min));
|
|
} else {
|
|
const positiveMin = getLogPositiveMin(values, base, max);
|
|
minTick = Math.floor(log(base, positiveMin));
|
|
}
|
|
const count = maxTick - minTick;
|
|
const avg = Math.ceil(count / tickCount);
|
|
const ticks = [];
|
|
for (let i = minTick; i < maxTick + avg; i = i + avg) {
|
|
ticks.push(Math.pow(base, i));
|
|
}
|
|
if (min <= 0) {
|
|
// 最小值 <= 0 时显示 0
|
|
ticks.unshift(0);
|
|
}
|
|
return ticks;
|
|
}
|