バーが日ごとに整理されているヒストグラムをflotで作成しようとしています。
値を1日1バーにマージする方法が見つかりません。
__
何か案は?
あなたの質問には、フロット固有のものがあるかもしれません。その場合、私はそれらを見逃している可能性があります。ただし、日付を含むjavascriptデータ構造があり、それらを丸1日に集約したい場合は、次のようにすることができます。
次のデータソースを想定します。
var data = [];
data.push({ value: 4, date: new Date(1278940338413) }); // july 12, 15:12:18
data.push({ value: 7, date: new Date(1278340738313) }); // july 5, 16:38:58
data.push({ value: 2, date: new Date(1278940331313) }); // july 12, 15:12:11
次に、次のような関数を記述して、データ構造を新しい形式に解析できます。
function aggregateByDate(source) {
var aggregateHash = {};
for(var i = 0; i < source.length; i++) {
var item = source[i];
var compareString = item.date.getFullYear() + '-' + (item.date.getMonth()+1) + '-' + item.date.getDate();
if(!(compareString in aggregateHash)) {
aggregateHash[compareString] = [];
}
aggregateHash[compareString].push(item);
}
var newSource = [];
for(var key in aggregateHash) {
var sum = 0;
for(var i = 0; i < aggregateHash[key].length; i++) {
sum += aggregateHash[key][i].value;
}
newSource.push({
total: sum,
count: aggregateHash[key].length,
items: aggregateHash[key],
dateString: key
});
}
return newSource;
}
次の結果が得られます。
/*
INPUT:
[
{ value: 4, date: ( july 12, 15:12:18 ) },
{ value: 7, date: ( july 5, 16:38:58 ) },
{ value: 2, date: ( july 12, 15:12:11 ) }
]
*/
var output = aggregateByDate(data);
/*
OUTPUT:
[
{ count: 2, dateString: '2010-7-12', items: Array(2), total: 6 },
{ count: 1, dateString: '2010-7-5', items: Array(1), total: 7 }
]
*/
これは、出力にキーとして表されているものを使用してハッシュを作成しdateString
、ソースコレクションを反復処理して、このハッシュに各ハッシュキーの配列を入力します。その後、ハッシュ内のすべてのキーを繰り返し、ハッシュされたグループの結果を含むオブジェクトの配列を作成します。