groupToStack = function(data, groupBy, colorBy, reducer = v => v.length) {
const groupedMap = d3.group(data, d => d[groupBy], d => d[colorBy]);
const keys = Array.from(new Set(data.map(d => d[colorBy])).values());
return Array.from(groupedMap.entries()).map(g => {
const obj = {};
obj[groupBy] = g[0];
for (let col of keys) {
const vals = g[1].get(col);
obj[col] = !vals ? 0 : reducer(Array.from(vals.values()));
}
return obj;
});
}