2017-10-16 12 views
1

Je souhaite créer un graphique à barres où l'axe x est la date, par ex. 2017-08-12, et la valeur y est le nombre de lignes de données (c'est-à-dire le nombre d'enregistrements) à la même date.graphique barChart avec dimension temporelle

// get data into right format 
var dateFormat = d3.time.format("%Y-%m-%d"); 
pageViews.forEach(function(d) { 
    d['timestamp'] = dateFormat.parse(d['timestamp'].slice(0,10)); 
    d['timestamp'].setDate(1); 
}); 

// Create Crossfilter instance 
var cf = crossfilter(data); 

var dateDim = cf.dimension(function(d) {return d['timestamp'];}); 

var numByDate = dateDim.group(); 

mais si je

console.log(numByDate.top(Infinity)); 

cela renvoie 5 éléments qui sont le premier jour de chaque mois, de sorte que le groupe que j'ai est en termes d'année mois au lieu de l'année-mois-jour , Comment puis-je résoudre ça?

J'ai regardé dans ce crossfilter.js: group data by month, mais cela n'a pas fonctionné, après avoir utilisé .all() je reçois toujours la même chose.

Et j'ai essayé ceci:

var numByDate = dateDim.group(function(d) {return d['timestamp'];}); 

il me retourne juste un objet vide.

Répondre

1

donc ce résultat est de mon manque de familiarité avec js et copier coller le code exemple ...

La question provient d'une mauvaise utilisation de la méthode setDate,

setDate(1) 

serait tout simplement régler le jour de la mois dans les données au premier jour, de sorte que la méthode de groupe aurait seulement plusieurs dates uniques à travailler avec.