JavaScript
// Make sure our data is typed properly.
var coerce_row = function(d){
return {
time: new Date(+d[0] * 1000.0),
field: d[1],
temperature: +d[2],
count: +d[3],
};
};
var data = [
//['time', 'text', 'temperature', 'count'],
['1379952000', 'field_1', 91, 56],
['1379952000', 'field_2', 50, 20],
['1379952000', 'field_3', 88, 24],
['1379952000', 'field_4', 50, 37],
['1379953200', 'field_1', 97, 58],
['1379953200', 'field_2', 84, 86],
['1379953200', 'field_3', 85, 62],
['1379953200', 'field_4', 88, 73],
['1379954400', 'field_1', 89, 38],
['1379954400', 'field_2', 52, 26],
['1379954400', 'field_3', 98, 66],
['1379954400', 'field_4', 96, 38],
['1379955600', 'field_1', 95, 98],
['1379955600', 'field_2', 88, 12],
['1379955600', 'field_3', 57, 95],
['1379955600', 'field_4', 94, 80],
['1379956800', 'field_1', 77, 51],
['1379956800', 'field_2', 50, 19],
['1379956800', 'field_3', 58, 23],
['1379956800', 'field_4', 99, 29],
['1379958000', 'field_1', 75, 28],
['1379958000', 'field_2', 57, 16],
['1379958000', 'field_3', 65, 53],
['1379958000', 'field_4', 84, 37],
['1379959200', 'field_1', 98, 72],
['1379959200', 'field_2', 71, 63],
['1379959200', 'field_3', 50, 68],
['1379959200', 'field_4', 51, 72],
['1379960400', 'field_1', 91, 64],
['1379960400', 'field_2', 64, 77],
['1379960400', 'field_3', 89, 13],
['1379960400', 'field_4', 62, 85],
['1379961600', 'field_1', 82, 69],
['1379961600', 'field_2', 53, 70],
['1379961600', 'field_3', 74, 48],
['1379961600', 'field_4', 66, 29]
];
var dataset = data.map(coerce_row);
// charts
var time_chart = dc.compositeChart("#time-chart"),
temp_chart = dc.barChart("#temp-chart"),
width = temp_chart.root()[0][0].parentElement.clientWidth;
// crossfilter
var add = function(p, d){ return p + d.count;},
rem = function(p, d){ return p - d.count;},
ini = function(){ return 0;},
ndx = crossfilter(dataset),
all = ndx.groupAll().reduce(add, rem, ini),
...