2010-07-12 5 views
0

J'essaye de créer un histogramme en flot, où les barres sont organisées par jour.Histogramme en flot - Javascript

Je ne trouve pas un moyen de fusionner les valeurs en 1 bar par jour.

__

Toutes les idées?

+0

Eh bien, cela dépend complètement de ce que sont vos "valeurs". – Pointy

Répondre

3

Il y a peut-être des choses à votre question qui sont spécifiques au flot, auquel cas j'ai peut-être manqué leur attention. Mais si vous avez juste une structure de données javascript avec des dates, et que vous voulez les agréger en jours entiers, vous pouvez faire quelque chose comme ça.

On suppose la source de données suivantes:

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 

Vous pouvez alors écrire une fonction comme celui-ci pour analyser votre structure de données dans un nouveau format:

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; 
} 

Il va vous donner ce qui suit résultat:

/* 
    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 } 
    ] 
*/ 

Qu'est-ce que cela fait est de créer un hachage avec ce qui est représenté dans le ou tput comme dateString pour une clé, et itère sur la collection source pour remplir ce hachage avec des tableaux pour chaque clé de hachage. Après cela, il itère toutes les clés du hachage et crée un tableau d'objets contenant le résultat du groupe haché.