function initData(data, colors) { var max = 0; data.forEach(function (v) { v[2] = new Date(v[0]); v[3] = d3.keys(v[1]); v[3].sort(function (a, b) { return v[1][b] - v[1][a]; }); var y0 = 0; var i = 0; var minMax = getValuesMinMax(v[1]); v[6] = {}; v[4] = v[3].map(function (id) { var color = colors(normalize(v[1][id], minMax)); var r = { id: id, i: i++, v: v[1][id], y0: y0, y1: y0 += v[1][id], color: color }; v[6][id] = r; return r; }); v[5] = minMax; max = Math.max(max, y0); }); return max; } function getValuesMinMax(values) { var v = []; var s = 0; for (var k in values) { v.push(values[k]); s += values[k]; } var r = { min: Math.min.apply(this, v), max: Math.max.apply(this, v) }; r.diff = r.max - r.min; r.sum = s; return r; } function normalize(v, minMax) { return minMax.diff ? (v - minMax.min) / minMax.diff : 0.5; }