Spaces:
Sleeping
Sleeping
| import {ticks, tickIncrement} from "d3-array"; | |
| import continuous, {copy} from "./continuous.js"; | |
| import {initRange} from "./init.js"; | |
| import tickFormat from "./tickFormat.js"; | |
| export function linearish(scale) { | |
| var domain = scale.domain; | |
| scale.ticks = function(count) { | |
| var d = domain(); | |
| return ticks(d[0], d[d.length - 1], count == null ? 10 : count); | |
| }; | |
| scale.tickFormat = function(count, specifier) { | |
| var d = domain(); | |
| return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier); | |
| }; | |
| scale.nice = function(count) { | |
| if (count == null) count = 10; | |
| var d = domain(); | |
| var i0 = 0; | |
| var i1 = d.length - 1; | |
| var start = d[i0]; | |
| var stop = d[i1]; | |
| var prestep; | |
| var step; | |
| var maxIter = 10; | |
| if (stop < start) { | |
| step = start, start = stop, stop = step; | |
| step = i0, i0 = i1, i1 = step; | |
| } | |
| while (maxIter-- > 0) { | |
| step = tickIncrement(start, stop, count); | |
| if (step === prestep) { | |
| d[i0] = start | |
| d[i1] = stop | |
| return domain(d); | |
| } else if (step > 0) { | |
| start = Math.floor(start / step) * step; | |
| stop = Math.ceil(stop / step) * step; | |
| } else if (step < 0) { | |
| start = Math.ceil(start * step) / step; | |
| stop = Math.floor(stop * step) / step; | |
| } else { | |
| break; | |
| } | |
| prestep = step; | |
| } | |
| return scale; | |
| }; | |
| return scale; | |
| } | |
| export default function linear() { | |
| var scale = continuous(); | |
| scale.copy = function() { | |
| return copy(scale, linear()); | |
| }; | |
| initRange.apply(scale, arguments); | |
| return linearish(scale); | |
| } | |