2016-06-09 14 views
0

Ist es in D3 möglich, eine lineare Skala zu verwenden, aber (Ordnungsstil) Beschriftungen zu verwenden?Lineare Skala mit Beschriftungen in D3

Ich möchte Monatsnamen unter X-Achse anzeigen. Ich habe zuerst die ordinale Skala benutzt und es hat gut funktioniert; aber stellt sich heraus, D3 Zoom funktioniert nicht mit Ordinalskala.

Also ich möchte die lineare Skala haben (0-11 als Monatszahlen) aber irgendwie Monatsnamen bekommen, wenn wir die Achse rendern. Ist das möglich? Irgendwelche Vorschläge/Workarounds werden geschätzt.

Antwort

1

ich erreicht dieses Axis.tickFormat

Zum Beispiel verwenden,

var y = d3.scale.linear() 
.range([height, 0]); 

var yAxis = d3.svg.axis() 
.scale(y) 
.orient("left") 
.ticks(5) 
.tickFormat(function (d) { 
    switch(d) { 
     case 40: return "Monday"; break; 
     case 50: return "Tuesday"; break; 
     case 60: return "Wednesday"; break; 
     case 70: return "Thursday"; break; 
     case 80: return "Friday"; break; 
    } 
}); 
+1

Sie können ein Array für alle Monate erstellen und die Funktion (d) verwenden {return arr [d]; } im tickformat() auch –

+0

Vielen Dank für den Vorschlag. Definitiv viel sauberer. – akshayKhot

+0

Nur realisiert, bezieht sich "d" nicht auf den tatsächlichen Tick-Wert? z.B. Im obigen Beispiel wird "d" die Werte 40, 50 usw. annehmen. Wie kann ich 'arr [d]'? Ich habe 'Funktion (d, i)' versucht, aber es gibt Fehler – akshayKhot

1

sollte wie dies funktionieren, aber Sie werden Ihre ‚Daten‘ müssen entsprechend abzubilden.

var data = [40,50,60,70,80] 
var days = ["Mon","Tue","Wed","Thu","Fri"] 

var yAxis = d3.svg.axis() 
.scale(y) 
.orient("left") 
.ticks(5) 
.tickFormat(function (d,i) { 
    return days[i]; 
});