reductio
Version:
Reductio: Crossfilter groupings
45 lines (43 loc) • 1.34 kB
JavaScript
import crossfilter from 'crossfilter2';
var histogram = {
add: function (a, prior, path) {
var bisect = crossfilter.bisect.by(function(d) { return d; }).left;
var bisectHisto = crossfilter.bisect.by(function(d) { return d.x; }).right;
var curr;
return function (p, v, nf) {
if(prior) prior(p, v, nf);
curr = path(p).histogram[bisectHisto(path(p).histogram, a(v), 0, path(p).histogram.length) - 1];
curr.y++;
curr.splice(bisect(curr, a(v), 0, curr.length), 0, a(v));
return p;
};
},
remove: function (a, prior, path) {
var bisect = crossfilter.bisect.by(function(d) { return d; }).left;
var bisectHisto = crossfilter.bisect.by(function(d) { return d.x; }).right;
var curr;
return function (p, v, nf) {
if(prior) prior(p, v, nf);
curr = path(p).histogram[bisectHisto(path(p).histogram, a(v), 0, path(p).histogram.length) - 1];
curr.y--;
curr.splice(bisect(curr, a(v), 0, curr.length), 1);
return p;
};
},
initial: function (thresholds, prior, path) {
return function (p) {
p = prior(p);
path(p).histogram = [];
var arr = [];
for(var i = 1; i < thresholds.length; i++) {
arr = [];
arr.x = thresholds[i - 1];
arr.dx = (thresholds[i] - thresholds[i - 1]);
arr.y = 0;
path(p).histogram.push(arr);
}
return p;
};
}
};
export default histogram;