2017-07-15 3 views
1

J'ai joué un peu avec dc.js/crossfilter.js et j'ai rencontré un problème que je n'arrivais pas à résoudre. Mes données tient à ce modèle:dc.js: Boxplot avec groupement imbriqué

[2016-02-01, "Lorem ipsum", -45] [2016-02-03, "Lorem ipsum", 34] [2016-03-04, "Lorem ipsum", 101] ...

Donc, fondamentalement, une série temporelle avec une valeur numérique par jour. Ce que je voudrais faire: Dessiner un boxplot avec une boîte simple, affichant la médiane etc. pour les sommes du mois (c'est-à-dire la somme d'un mois est reflétée par un point, les moustaches montrent les quantiles sur tous les mois). Ce qui signifie que je dois groupe/somme par mois pour obtenir ces valeurs d'abord:

[2016-02, 79] [2016-03, 101] ...

Je ne sais pas si comment le faire dans dc.js - si le groupe I par mois puis utilisez Pour ma boîte à moustache, je reçois une boîte par mois et les mesures se réfèrent aux entrées individuelles. Ce qui est logique avec le framework dc.js, mais ce n'est pas ce que je cherche.

Des idées sur comment faire à cela? Merci de votre aide!

Meilleures salutations

Edit: Added rendered boxplot

Répondre

0

Oui, la boîte à moustaches attend le group.all() pour retourner un tableau de paires clé/valeur, dont la valeur est un tableau de nombres.

Lorsque vous avez besoin de remodeler les données de filtre croisé pour un diagramme, fake group est actuellement la meilleure technique. Ceci est un objet qui implémente la seule méthode dc.js utilisations, (*)group.all(), tirant les données d'un groupe crossfilter:

function one_bin(group, key) { 
    return { 
    all: function() { 
     return [{ 
     key: key, 
     value: group.all().map(kv => kv.value) 
     }]; 
    } 
    }; 
} 

one_bin prend le groupe d'origine et un nom de clé; il produit un tableau avec une clé/valeur, où la clé est le nom de la clé, et la valeur est un tableau de toutes les valeurs du groupe d'origine.

Enveloppez votre groupe original avec one_bin et passer à la boîte à moustaches:

var box = dc.boxPlot('#box') 
    .width(200).height(500) 
    .dimension(monthDim) // this is actually wrong but can't brush anyway 
    .group(one_bin(monthGroup, 'all months')) 
; 

Bien sûr, le brossage ne fonctionnera pas, mais ce ne serait que tout ou rien avec la dimension x de ce tableau .

Exemple violon: https://jsfiddle.net/q8m54cg3/15/

(*) Depuis dc.js 2.1; 2.0 et ci-dessous ont également utilisé group.top(N).

+0

Merci beaucoup! Je reviendrai vers vous dès que j'aurais l'occasion de l'essayer sur mes données. – onemorequestion

+0

Donc - le rendu boxplot, mais semble un peu off. Les moustaches sont manquantes (voir photo dans le message original). Une idée pourquoi? – onemorequestion

+0

Avez-vous inclus dc.css? On dirait que le style est foiré (et ça va dans mon violon). – Gordon