Skip to content

Commit

Permalink
fix bin2
Browse files Browse the repository at this point in the history
  • Loading branch information
mbostock committed Jan 3, 2021
1 parent 42f3c5a commit 24f7902
Showing 1 changed file with 22 additions and 6 deletions.
28 changes: 22 additions & 6 deletions src/transforms/bin.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ export function bin1(options = {}) {
const bin = binof({value, domain, thresholds});
return (data, facets) => {
let bins = bin(data);
if (facets !== undefined) return binfacets(bins, facets, cumulative);
if (facets !== undefined) return binfacets(bins, facets, binsubset1, cumulative);
if (cumulative) bins = accumulate(cumulative < 0 ? bins.reverse() : bins);
bins = bins.filter(nonempty);
return {index: range(bins), data: bins};
Expand All @@ -17,8 +17,15 @@ export function bin2({x = {}, y = {}, domain, thresholds} = {}) {
const binX = binof({domain, thresholds, value: first, ...maybeValue(x)});
const binY = binof({domain, thresholds, value: second, ...maybeValue(y)});
return (data, facets) => {
let bins = cross(binX(data).filter(nonempty), binY(data).filter(nonempty).map(binset), binsubset);
if (facets !== undefined) return binfacets(bins, facets);
let bins = cross(binX(data).filter(nonempty), binY(data).filter(nonempty).map(binset), (x, y) => {
const subbin = x.filter(i => y.has(i));
subbin.x0 = x.x0;
subbin.x1 = x.x1;
subbin.y0 = y.x0;
subbin.y1 = y.x1;
return subbin;
});
if (facets !== undefined) return binfacets(bins, facets, binsubset2);
bins = bins.filter(nonempty);
return {index: range(bins), data: bins};
};
Expand All @@ -38,12 +45,12 @@ function binof({value, domain, thresholds}) {
};
}

function binfacets(bins, facets, cumulative) {
function binfacets(bins, facets, subset, cumulative) {
const index = [];
const data = [];
let k = 0;
for (const facet of facets.map(set)) {
let b = bins.map(bin => binsubset(bin, facet));
let b = bins.map(bin => subset(bin, facet));
b = cumulative ? accumulate(cumulative < 0 ? b.reverse() : b) : b;
b = b.filter(nonempty);
index.push(offsetRange(b, k));
Expand All @@ -60,13 +67,22 @@ function binset(bin) {
return set;
}

function binsubset(bin, index) {
function binsubset1(bin, index) {
const subbin = bin.filter(i => index.has(i));
subbin.x0 = bin.x0;
subbin.x1 = bin.x1;
return subbin;
}

function binsubset2(bin, index) {
const subbin = bin.filter(i => index.has(i));
subbin.x0 = bin.x0;
subbin.x1 = bin.x1;
subbin.y0 = bin.y0;
subbin.y1 = bin.y1;
return subbin;
}

function accumulate(bins) {
let sum = 0;
return bins.map(({x0, x1, length}) => ({x0, x1, length: sum += length}));
Expand Down

0 comments on commit 24f7902

Please sign in to comment.