2017-05-04 94 views
0

D3的histogram佈局像[6, 9, 4, 2, 0, 6, 9]一個格式要求的數據並創建整潔根據您的域名,蜱,等d3.histogram - 再斌從Crossfilter數據

Crossfilter組數據直方圖結構(更多或更少)中,在結構是這樣的:

[ 
    { key: 0, value: 1 }, 
    { key: 1, value: 8 }, 
    { key: 3, value: 7 }, 
] 

注意,有一個爲鍵2.沒有對象區間的數目是從所述數據的不同值的只是數量。同時d3.histogram().threshholds(...)將允許我控制我得到的箱數。

我想要可視化Crossfilter數據並利用d3.histogram()的能力來製作方便的箱子。有一些訪問器函數可以用來解析Crossfilter數據嗎?或者我需要先將它強制轉換爲常規數組?

+1

這是我不明白:'D3 .histogram'被設計用來獲取原始數據並將其放入容器中。 Crossfilter也做同樣的事情,你顯示的組輸出已經被「分類」或聚合。我會說要麼使用Crossfilter或使用'd3.histogram',但我沒有看到使用兩者的理由。如果問題更多地圍繞如何在d3可視化中使用Crossfilter輸出,我們可以解決這個問題,但也有一些教程,如http://eng.wealthfront.com/2012/09/05/explore-your-multivariate- data-with-crossfilter/ –

+0

關鍵的區別在於'd3.histogram'的_ins的靈活性,使用諸如'd3.histogram.threshholds()'之類的東西。 例如,如果輸入數據有一百萬個不同的值,但我只想要15個分檔。 對不起,我應該更清楚我的要求。我會更新這個問題來澄清。 – DMack

+0

Crossfilter的dimension.group採用訪問器函數,可以控制維度密鑰如何放入組中。那是你在找什麼? https://github.com/crossfilter/crossfilter/wiki/API-Reference#dimension_group –

回答

0

我還在探索這一點,但這裏有一個reduce功能,將壓平/擴展Crossfilter組數據轉化爲D3的histogram佈局的數組:

// reduce callback function 
function flattenGroupData(flattened, currentRecord) { 
    let value = currentRecord.key; 
    let quantity = currentRecord.value; 
    let expandedArray = Array(quantity).fill(value); 
    return flattened.concat(expandedArray); 
} 

let groupData = myCrossfilterGroup.all(); 

let dataForD3 = groupData.reduce(flattenGroupData, []);