I have data with one column that is a list of labels for each data point. I would like to use dc.js to make a row chart that plots the number of occurrences of each label.
Data looks like this:
Date , Labels
1/1/2015 , "A, B, C"
1/2/2015 , "B"
1/3/2015 , "C, A"
1/4/2015 , "A"
I would like a row chart that aggregates them like this:
A: 3
B: 2
C: 2
My code so far:
var labels = ["A", "B", "C"];
var labelBar = dc.rowChart("#label-bar");
d3.csv('data.csv', function (csv) {
var data = crossfilter(csv);
var labelDim = data.dimension(function(d){return d["Labels"];});
var labelGroup = labelDim.group().reduce(
function(p,v) { //add
for (i = 0; i < labels.length; i++) {
if(v["Labels"].indexOf(labels[i]) > -1)
p[labels[i]]++;
}
return p;
},
function(p,v) { //subtract
for (i = 0; i < labels.length; i++) {
if(v["Labels"].indexOf(labels[i]) > -1)
p[labels[i]]--;
}
return p;
},
function(p,v) { //initial
p = {};
for (i = 0; i < labels.length; i++) {
p[labels[i]] = 0;
}
return p;
});
labelBar
.dimension(labelDim)
.group(labelGroup)
.elasticX(true);
});
The code only creates a row chart with one bar for each data point, not for each label. Any help would be appreciated.
TypeError: undefined is not a function (evaluating '_chart.group().all()') – Eric Nov 20 '15 at 16:40