2016-07-23 10 views
0

Ich bin mit crossfilter und dc.js arbeiten und ich möchte so etwas machen:Crossfilter.js und dc.js barchart Fragen

enter image description here

So, nachdem die Dimension und die Gruppe zu erstellen:

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

ich versuchte, ein Balkendiagramm wie diese zu zeichnen:

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

Hier ist die 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")); 

Und ich dieses Ergebnis:

enter image description here

Die Probleme:

. Wie Sie sehen können, habe ich in Achsenwerten viele Daten ...: s

. Ich habe keine Bürste, trotz brushOn (true)

. Ich möchte die Achse wie im Beispiel 2 Stunden mal 2 Stunden segmentieren

Bitte wer kann mir helfen, das oben genannte zu erreichen?

+0

Jeder helfen? –

+0

Sieht aus wie Ihre Zeitgruppe auf der falschen Aggregationsebene definiert ist. Damit Menschen Ihnen am besten helfen können, wäre es gut, wenn Sie ein funktionierendes Beispiel zusammenstellen könnten. Hier ist ein JSFiddle mit den benötigten Bibliotheken, die Sie starten können: https://jsfiddle.net/esjewett/jusjkm8j/ –

+0

Für zukünftige Referenz, beachten Sie bitte das feste dc.js-Tag. – Gordon

Antwort

0

1. Zuerst sollten wir die Crossfilter-Instanz erstellen.

var ndx = crossfilter(dataSet); 

2. Dann sollten wir die Dimension erstellen.

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

3. Dann Gruppe sollten wir das Ergebnis.

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

4. Dann schaffen wir das Diagramm.

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

5. Schließlich geben die Definiton des Diagramms

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