var data = [
{date: new Date(2016, 11, 10), value: 1},
{date: new Date(2016, 11, 11), value: 2},
{date: new Date(2016, 11, 12), value: 3},
{date: new Date(2016, 11, 13), value: 3},
{date: new Date(2016, 11, 14), value: 2},
{date: new Date(2016, 11, 15), value: 3},
{date: new Date(2016, 11, 16), value: 5},
{date: new Date(2016, 11, 16), value: 4},
{date: new Date(2016, 11, 17), value: 2},
{date: new Date(2016, 11, 19), value: 3},
{date: new Date(2016, 11, 20), value: 1},
{date: new Date(2016, 11, 21), value: 3}
];
rollup(data, 3);
function rollup(data, days) {
var min = data.reduce(function(a, b) {if (b.date < a) return b.date; return a;}, new Date(3000, 1, 1)),
max = data.reduce(function(a, b) {if (b.date > a) return b.date; return a;}, new Date(1000, 1, 1)),
output = [];
for (var day = min; day < max; day.setDate(day.getDate() + days)) {
var end = new Date(day);
end.setDate(end.getDate() + days);
var working = data.filter(function(a) {return (a.date >= day && a.date < end);}),
value = working.reduce(function(a, b) {return a + b.value;}, 0);
output.push({date: day.toString() + ' - ' + end.toString(), value: value});
}
console.log(output);
return output;
}
こんにちは、コードに感謝サンプル、私はそれを行う方法を持っているかもしれません。私は値を組み合わせる必要はありません。すでに値がサーバから来ていますが、スクリプトで行ったのと同じように、割り当てられた日付と次の値を組み合わせる必要があります。私はそれらを表示するためにd3 'axis.tickValues'関数https://github.com/d3/d3-3.x-api-reference/blob/master/SVG-Axes.md#tickValuesを使う必要があると思います。 – codeepic
ロールアップ関数で 'min'と' max'値を得るために 'reduce'を使っています。これは 'd3.extent'で行うことができます:' x.domain(d3.extent(data、d => d.date)); ' – codeepic
はい、私はtickValuesを達成する方法は序数を使うことです[this post](http://stackoverflow.com/questions/19125559/multi-line-ordinal-d3-chart)のようなあなたのカテゴリによってx軸に沿って表示されます。 'd3.extent'に同意しました。私はプロトタイプ関数を使うことを好みましたが、おそらくこれは良いでしょう。 – abigperson