@quartic/bokehjs
Version:
Interactive, novel data visualization
67 lines (61 loc) • 1.84 kB
text/coffeescript
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 =
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 =
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 =
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 =
factors = range.factors
for i in [0...xprimes.length]
result[i] = factors[Math.floor(x[i] - 0.5 - range.offset)]
return result