2016-07-23 94 views
0

我與crossfilterdc.js工作,我希望讓這樣的事情:Crossfilter.js和dc.js條形圖問題

enter image description here

因此,創建尺寸和後組:

var Time1 = ndx.dimension(function(d) { return d.Dep_Time1; }); var FlightsByTime1 = Time1.group();

我想畫就這樣一個條形圖:

var Time1Chart = dc.barChart("#Time1-chart");

下面是它的definiton:

Time1Chart 

     .height(160) 
     .transitionDuration(1000) 
     .dimension(Time1) 
     .group(FlightsByTime1) 
     .brushOn(true) 
     .margins({top: 10, right: 50, bottom: 30, left: 50}) 
     .centerBar(false) 
     .gap(1) 
     .elasticY(true) 
     .x(d3.scale.ordinal().domain(Time1))       
     .xUnits(dc.units.ordinal) 
     .renderHorizontalGridLines(true) 
     .renderVerticalGridLines(true) 
     .ordering(function(d){return d.value;}) 
     .yAxis().tickFormat(d3.format("f")); 

我得到這樣的結果:

enter image description here

的問題:

正如你所看到的,在軸值中我有很多數據...:s

我沒有刷子,儘管brushOn(true)

我想分割像在這個例子中的軸,2小時2小時

請誰能幫助我達到上述目的?

+0

任何人幫助的definiton? –

+0

看起來你的時間組被定義在錯誤的聚合級別上。對於最好能夠幫助你的人來說,如果你能整合一個實際的例子,這將是一件好事。這裏是一個JSFiddle,加載了必要的庫,你可以從這裏開始:https://jsfiddle.net/esjewett/jusjkm8j/ –

+0

爲了將來的參考,請注意固定的dc.js標籤。 – Gordon

回答

0

1.首先我們應該創建交叉過濾器實例。

var ndx = crossfilter(dataSet); 

2.那麼我們應該創建維度。

var Time1 = ndx.dimension(function(d) { return d.Dep_Time1.getHours() + d.Dep_Time1.getMinutes()/60; }); 

那麼我們就應該組的結果。

var FlightsByTime1 = Time1.group(Math.floor); 

4.然後我們創建圖表。

Time1Chart = dc.barChart("#Time1-chart"); 

5.最後爲圖

Time1Chart 

     .height(133) 
     .transitionDuration(1000) 
     .dimension(Time1) 
     .group(FlightsByTime1) 
     .brushOn(true) 
     .margins({top: 10, right: 50, bottom: 30, left: 50}) 
     .centerBar(false) 
     .gap(1) 
     .elasticY(true) 
     .x(d3.scale.linear() 
     .domain([0, 24]) 
     .rangeRound([0, 10 * 24]))      
     .renderHorizontalGridLines(true) 
     .renderVerticalGridLines(true) 
     .ordering(function(d){return d.value;}) 
     .yAxis().tickFormat(d3.format("f"));