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?

questionAnswers(1)

yourAnswerToTheQuestion