UNPKG

@data-ui/histogram

Version:

React + d3 library for creating histograms

70 lines (58 loc) 1.83 kB
"use strict"; exports.__esModule = true; exports.default = computeDomainsFromBins; var _d3Array = require("d3-array"); var _caseInsensitiveSort = _interopRequireDefault(require("./caseInsensitiveSort")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /* * Computes the bin and value domains from numeric or categorical bins */ function computeDomainsFromBins(_ref) { var binsByIndex = _ref.binsByIndex, binType = _ref.binType, valueKey = _ref.valueKey, binValues = _ref.binValues; var binDomain; var valueDomain; Object.values(binsByIndex).forEach(function (bins) { var currValueMax = (0, _d3Array.max)(bins, function (d) { return d[valueKey]; }); if (valueDomain) { valueDomain[1] = Math.max(currValueMax, valueDomain[1]); } else { valueDomain = [0, currValueMax]; } if (binType === 'numeric') { if (binDomain) { binDomain[0] = Math.min(bins[0].bin0, binDomain[0]); binDomain[1] = Math.max(bins[bins.length - 1].bin1, binDomain[1]); } else { binDomain = [bins[0].bin0, bins[bins.length - 1].bin1]; } } else { if (!binDomain) binDomain = {}; // use lookup to avoid lots of Array scans bins.forEach(function (bin) { binDomain[bin.bin] = true; }); } }); if (Array.isArray(binValues)) { var providedBinsCoverDomain = true; binValues.forEach(function (binValue) { if (!(binValue in binDomain)) { providedBinsCoverDomain = false; } }); if (providedBinsCoverDomain) { binDomain = binValues; } } if (!Array.isArray(binDomain)) { binDomain = Object.keys(binDomain).sort(_caseInsensitiveSort.default); } return { binDomain: binDomain, valueDomain: valueDomain }; }