You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
40 lines
997 B
40 lines
997 B
|
4 months ago
|
import {bisect} from "d3-array";
|
||
|
|
import {initRange} from "./init.js";
|
||
|
|
|
||
|
|
export default function threshold() {
|
||
|
|
var domain = [0.5],
|
||
|
|
range = [0, 1],
|
||
|
|
unknown,
|
||
|
|
n = 1;
|
||
|
|
|
||
|
|
function scale(x) {
|
||
|
|
return x != null && x <= x ? range[bisect(domain, x, 0, n)] : unknown;
|
||
|
|
}
|
||
|
|
|
||
|
|
scale.domain = function(_) {
|
||
|
|
return arguments.length ? (domain = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();
|
||
|
|
};
|
||
|
|
|
||
|
|
scale.range = function(_) {
|
||
|
|
return arguments.length ? (range = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();
|
||
|
|
};
|
||
|
|
|
||
|
|
scale.invertExtent = function(y) {
|
||
|
|
var i = range.indexOf(y);
|
||
|
|
return [domain[i - 1], domain[i]];
|
||
|
|
};
|
||
|
|
|
||
|
|
scale.unknown = function(_) {
|
||
|
|
return arguments.length ? (unknown = _, scale) : unknown;
|
||
|
|
};
|
||
|
|
|
||
|
|
scale.copy = function() {
|
||
|
|
return threshold()
|
||
|
|
.domain(domain)
|
||
|
|
.range(range)
|
||
|
|
.unknown(unknown);
|
||
|
|
};
|
||
|
|
|
||
|
|
return initRange.apply(scale, arguments);
|
||
|
|
}
|