Files
cellxgene/client/src/util/scaleLinear.js
T

23 lines
697 B
JavaScript

// jshint esversion: 6
// Substitute for a d3 linear scale - less flexible, more performant.
// Returns a function which will scale a value.
//
// Example will scale [0,1] to [-1,1]
// var myScale = scaleLinear([0, 1], [-1, 1]);
// myScale(0) === -1
// this is is equivalent to d3.scaleLinear().domain([0,1]).range([-1,1])
export default (domain, range) => {
const domainStart = domain[0];
const scale = (range[1] - range[0]) / (domain[1] - domain[0]);
const invScale = 1 / scale;
const rangeStart = range[0];
const f = (value) => (value - domainStart) * scale + rangeStart;
// inverter
f.invert = (value) => (value - rangeStart) * invScale + domainStart;
return f;
};