2017-07-15 46 views
1

我一直在玩dc.js/crossfilter.js了一下,遇到了一個問題,我無法環繞我的頭。我的數據堅持這種模式:dc.js:Boxplot與嵌套分組

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

因此,基本上,每天數值的時間序列。我想要做的是:用一個盒子繪製一個箱形圖,顯示該月份的總和的中間值(即一個月的總和反映一個點,這些鬚眉顯示所有月份的分位數)。這意味着我必須組/總和每月能拿到這些價值觀第一:

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

我不知道,雖然該怎麼做,在dc.js - 如果我按一個月,然後用對於我的boxplot,我每個月會得到一個盒子,並且這些度量指的是不確定的條目。這對dc.js的框架來說是有意義的,但那不是我想要的。

任何想法如何做到這一點?謝謝你的幫助!

問候

編輯:Added rendered boxplot

回答

0

呀,箱形圖的期待group.all()返回鍵/值對,其中值是數字數組的數組。

當您需要重塑圖表的交叉過濾器數據時,fake group是當前最好的技術。這是一個實現的唯一方法dc.js用途,(*)group.all(),從crossfilter組拉動數據中的對象:

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

one_bin採用原始基團和鍵名;它會生成一個包含一個鍵/值的數組,其中鍵是鍵名,並且該值是來自原始組的所有值的數組。

包裝你原來的組one_bin並將其傳遞到箱形圖:

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')) 
; 

當然,刷牙也不會工作,但它只會是全或與該圖表的x尺寸無關。

例撥弄:https://jsfiddle.net/q8m54cg3/15/

(*)由於dc.js 2.1; 2.0和以下也使用group.top(N)

+0

謝謝!只要有機會嘗試一下我的數據,我會盡快回復您。 – onemorequestion

+0

所以 - boxplot呈現,但看起來有點關閉。缺少鬍鬚(請參閱原始文章中的圖片)。任何想法爲什麼? – onemorequestion

+0

您是否包含dc.css?看起來造型很糟糕(在我的小提琴中也沒問題)。 – Gordon