@data-ui/histogram
Version:
React + d3 library for creating histograms
58 lines (51 loc) • 1.64 kB
JavaScript
;
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;
}