Daj etykiety osi porządkowych d3 inne niż nazwy skali
Mam porządekscale
z pewnymi etykietami dla różnych wartości. Chcę wyświetlić oś dla tej skali, gdzie etykiety osi nie są takie same jak etykiety skali. Mam ten kod:
var width = 1000
var height = 600
var margins = {
left: 100, // 40
right: 25,
bottom: 50,
top: 0
}
var y = d3.scale.ordinal().domain(["This", "That", "Other"]).rangePoints([margins.top, height-margins.bottom], 1);
var svg = d3.select("#plot").append("svg").attr("width",width).attr("height",height)
var yAxis = d3.svg.axis()
.scale(y)
.orient("left")
.tickValues(["This is long", "That is long", "Other is long"])
svg.append("g")
.attr("class", "axis")
.attr("transform", "translate(" + margins.left + ",0)")
.classed("yaxis", true)
.call(yAxis);
To działało, ale najwyraźniej nastąpiła pewna zmiana w d3 w ciągu ostatnich kilku miesięcy, która powoduje, że przestaje działać. (To inne pytanie mówi też, że powinienem móc korzystaćtickValues
w ten sposób.) Etykiety kleszczy nie pojawiają się. W konsoli JavaScript pojawia się błąd:
Unexpected value translate(0,NaN) parsing transform attribute. @ http://d3js.org/d3.v3.js:596
Śledzenie kodu wydaje się, że d3 próbuje wywołać skalę na każdej wartości kleszcza; to znaczy wzyway("This is long")
, co skutkuje NaN, ponieważ „To jest długie” nie znajduje się w skali. Nie wiem, dlaczego to robi.
Oto skrzypce pokazując problem. Jeśli komentujesz.tickValues
linia, etykiety osi są wyświetlane poprawnie. Gdy ta linia nie jest zakomentowana, etykiety nie działają.
W jaki sposób ustawić etykiety zaznaczania dla osi porządkowej w d3?