I have an array or objects consisting of a date and some values:
var flatData = [
{ "date": "2012-05-26", "product": "apple" },
{ "date": "2012-07-03", "product": "orange" },
...
]
I am trying to use d3.nest() to get a count of these objects by year and then by month.
var nestedData = d3.nest()
.key(function(d) { return d.date.split('-')[0]; }) // key is the year
.sortKeys(d3.ascending)
.key(function(d) {
var splitDate = d.date.split('-');
return splitDate[0] + '-' + splitDate[1]; // key is year-month
})
.sortKeys(d3.ascending)
.rollup(function(d) {
return d.length;
})
.entries(flatData);
This almost works, except that when there are no objects for a month, the nested data does not contain a record indicating a count of 0 for that month. Is there any trick to tell D3 to fill in these gaps?
(Of course, I can always do it the tedious way, i.e. to loop through all the nested levels and create a new data structure that fills in the gaps.)
Try adding the missing data points after reduction: