Skip to content

Commit

Permalink
Specify histogram thresholds in fixed-length array
Browse files Browse the repository at this point in the history
  • Loading branch information
mweiden committed Jan 2, 2020
1 parent f2d2e59 commit d53a799
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 2 deletions.
10 changes: 9 additions & 1 deletion client/__tests__/util/range.test.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { range, rangeFill } from "../../src/util/range";
import { range, rangeFill, linspace } from "../../src/util/range";

describe("range", () => {
test("no defaults", () => {
Expand Down Expand Up @@ -40,3 +40,11 @@ describe("rangefill", () => {
);
});
});

describe("linspace", () => {
test("linspace(arr, start, step)", () => {
expect(linspace(0.0, 2.0, 5)).toMatchObject(
[0.0, 0.5, 1.0, 1.5, 2.0]
);
});
});
8 changes: 7 additions & 1 deletion client/src/components/brushableHistogram/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import * as d3 from "d3";
import memoize from "memoize-one";
import * as globals from "../../globals";
import actions from "../../actions";
import { linspace } from "../../util/range";
import { makeContinuousDimensionName } from "../../util/nameCreators";

@connect((state, ownProps) => {
Expand Down Expand Up @@ -53,15 +54,20 @@ class HistogramBrush extends React.PureComponent {
const values = col.asArray();
const summary = col.summarize();
const { min: domainMin, max: domainMax } = summary;
const numBins = 40;

histogramCache.x = d3
.scaleLinear()
.domain([domainMin, domainMax])
.range([this.marginLeft, this.marginLeft + this.width]);

const [xStart, xStop] = histogramCache.x.domain();
const histThresholds = linspace(xStart, xStop, numBins);

histogramCache.bins = d3
.histogram()
.domain(histogramCache.x.domain())
.thresholds(40)(values);
.thresholds(histThresholds)(values);

const yMax = histogramCache.bins
.map(b => b.length)
Expand Down
5 changes: 5 additions & 0 deletions client/src/util/range.js
Original file line number Diff line number Diff line change
Expand Up @@ -43,3 +43,8 @@ export function range(start, stop, step) {
const len = Math.max(Math.ceil((stop - start) / step), 0);
return _doFill(new Array(len), start, step, len);
}

export function linspace(start, stop, nsteps) {
const delta = (stop - start) / (nsteps - 1).toFixed();
return range(0, nsteps, 1).map(i => start + i * delta);
}

0 comments on commit d53a799

Please sign in to comment.