2016-05-26 5 views
0

Ich habe ein Liniendiagramm. X-Achse haben Daten, aber sie sind nicht normal verteilt (keine Daten für Mittagessen oder Wochenenden), aber ich möchte sie sequenziell zeigen. Beispieldaten und meine Beispielgrafik ist unten, ich möchte nicht, dass mein Diagramm eine gerade Linie für die Zeit zeigt, die keine Daten hat, sollte es vom vorherigen Datum fortgesetzt werden.D3.js Liniendiagramm, X-Achse haben beliebige Daten, aber wollen sie nacheinander zeigen

Ich verwende x = d3.time.scale().range([0, width]), um x-Linie zu zeichnen. Irgendeine Idee?

x   y 
10:00:00 4 
10:10:00 5 
10:20:00 3 
10:30:00 2 
10:40:00 5 
10:50:00 3 
14:30:00 6 
14:40:00 7 

enter image description here

+0

möchten Sie Daten überspringen, wo Sie keine Daten haben? – murli2308

+0

Nun, in diesem Fall denke ich, Sie brauchen 'd3.scale.ordinal()' anstelle von 'd3.time.scale()' – SiddP

+0

Ja, wollen Daten überspringen, die keine Daten hat – fyelci

Antwort

5

Ein ordinal scale würde den Trick tun. Probieren Sie etwas wie folgt aus:

x = d3.time.scale().range([0, width]) Ersetzen Sie unter:

var x = d3.scale.ordinal() 
    .domain(data.map(function(d) { 
     return d.date; 
    })) 
    .rangeRoundBands([0, width], 0.1); 
+0

Das hat funktioniert, danke. Wenn ich das addiere, funktioniert .ticks() Funktion nicht. Meine Funktion ist xAxis = d3.svg.axis(). Scale (x) .orient ("rechts"). Ticks (5) .tickFormat (d3.time.format (dateFormat)) – fyelci

+0

Die Funktion ticks() dient zum Teilen der Achsenbezeichnungen wie im Bereich z. B. Ticks (5) würden den Bereich in 5 unterteilen und die Beschriftungen angeben, aber die Skala wird nicht beeinflusst, dh Ihre Skala ist immer noch der Bereich zwischen Anfangs- und Enddatum und alles dazwischen, wenn Sie die Zeitskala verwenden . – SiddP

+1

Ich glaube, dies würde dazu führen, dass jeder andere x-Wert angezeigt wird: 'xAxis.tickValues ​​(x.domain(). Filter (Funktion (d, i) {return! (I% 2);}));' Quelle: http://bl.ocks.org/mbstock/3212294 – wdickerson

Verwandte Themen