| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- /**
- * Calculate tick step.
- * Implementation from d3-array (ticks.js)
- * https://github.com/d3/d3-array/blob/master/src/ticks.js
- * @param start Start value
- * @param stop End value
- * @param count Ticks count
- */
- export function tickStep(start: number, stop: number, count: number): number {
- let e10 = Math.sqrt(50),
- e5 = Math.sqrt(10),
- e2 = Math.sqrt(2);
- let step0 = Math.abs(stop - start) / Math.max(0, count),
- step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),
- error = step0 / step1;
- if (error >= e10) {
- step1 *= 10;
- } else if (error >= e5) {
- step1 *= 5;
- } else if (error >= e2) {
- step1 *= 2;
- }
- return stop < start ? -step1 : step1;
- }
- export function getScaledDecimals(decimals, tick_size) {
- return decimals - Math.floor(Math.log(tick_size) / Math.LN10);
- }
- /**
- * Calculate tick size based on min and max values, number of ticks and precision.
- * @param min Axis minimum
- * @param max Axis maximum
- * @param noTicks Number of ticks
- * @param tickDecimals Tick decimal precision
- */
- export function getFlotTickSize(min: number, max: number, noTicks: number, tickDecimals: number) {
- var delta = (max - min) / noTicks,
- dec = -Math.floor(Math.log(delta) / Math.LN10),
- maxDec = tickDecimals;
- var magn = Math.pow(10, -dec),
- norm = delta / magn, // norm is between 1.0 and 10.0
- size;
- if (norm < 1.5) {
- size = 1;
- } else if (norm < 3) {
- size = 2;
- // special case for 2.5, requires an extra decimal
- if (norm > 2.25 && (maxDec == null || dec + 1 <= maxDec)) {
- size = 2.5;
- ++dec;
- }
- } else if (norm < 7.5) {
- size = 5;
- } else {
- size = 10;
- }
- size *= magn;
- return size;
- }
|