UNPKG

@quartic/bokehjs

Version:

Interactive, novel data visualization

67 lines (61 loc) 1.84 kB
import {LinearMapper} from "./linear_mapper" import {isNumber} from "core/util/types" export class CategoricalMapper extends LinearMapper map_to_target: (x, return_synthetic=false) -> if isNumber(x) if return_synthetic return x else return super(x) range = @source_range factors = range.factors if x.indexOf(':') >= 0 [factor, percent] = x.split(':') percent = parseFloat(percent) result = factors.indexOf(factor) + 0.5 + range.offset + percent else result = factors.indexOf(x) + 1 + range.offset if return_synthetic return result else return super(result) v_map_to_target: (xs, return_synthetic=false) -> if isNumber(xs[0]) if return_synthetic return xs else return super(xs) range = @source_range factors = range.factors results = Array(xs.length) for i in [0...xs.length] x = xs[i] if x.indexOf(':') >= 0 [factor, percent] = x.split(':') percent = parseFloat(percent) results[i] = factors.indexOf(factor) + 0.5 + range.offset + percent else results[i] = factors.indexOf(x) + 1 + range.offset if return_synthetic return results else return super(results) map_from_target: (xprime, skip_cat=false) -> xprime = super(xprime) if skip_cat return xprime range = @source_range factors = range.factors return factors[Math.floor(xprime - 0.5 - range.offset)] v_map_from_target: (xprimes, skip_cat=false) -> x = super(xprimes) for i in [0...x.length] x[i] = x[i] if skip_cat return x result = Array(x) range = @source_range factors = range.factors for i in [0...xprimes.length] result[i] = factors[Math.floor(x[i] - 0.5 - range.offset)] return result