UNPKG

@data-ui/histogram

Version:

React + d3 library for creating histograms

58 lines (51 loc) 1.64 kB
"use strict"; exports.__esModule = true; exports.default = binCategoricalData; var _caseInsensitiveSort = _interopRequireDefault(require("./caseInsensitiveSort")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var sortBins = function sortBins(a, b) { return (0, _caseInsensitiveSort.default)(a.bin, b.bin); }; /* * handles binning of categorical data by series index * if binValues are passed, ignores other bin values that are encountered * * returns an object of bins keyed on series index with the following shape * { * [seriesIdx]: Array<Object{ bin: String, data: Array<datum>, count: Number }>, * } */ function binCategoricalData(_ref) { var rawDataByIndex = _ref.rawDataByIndex, valueAccessor = _ref.valueAccessor, _ref$binValues = _ref.binValues, binValues = _ref$binValues === void 0 ? null : _ref$binValues; var binsByIndex = {}; Object.keys(rawDataByIndex).forEach(function (index) { var data = rawDataByIndex[index]; var bins = {}; data.forEach(function (datum) { var bin = valueAccessor(datum); bins[bin] = bins[bin] || { bin: bin, data: [], count: 0, id: bin }; bins[bin].data.push(datum); bins[bin].count += 1; }); // convert to an array of bins if (binValues) { binsByIndex[index] = binValues.map(function (bin) { return bins[bin] || { bin: bin, count: 0, data: [] }; }); } else { binsByIndex[index] = Object.values(bins).sort(sortBins); } }); return binsByIndex; }