我有一个scale
带有不同值的特定标签的序数。我想显示该比例的轴,其中轴标签与比例标签不同。我有这个代码:
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);
这曾经有效,但显然在过去几个月中 d3 发生了一些变化,导致它不再有效。(这个另一个问题也说我应该能够使用tickValues
这种方式。)不出现刻度标签。我在 JavaScript 控制台中收到错误消息:
Unexpected value translate(0,NaN) parsing transform attribute. @ http://d3js.org/d3.v3.js:596
跟踪代码,似乎 d3 试图在每个刻度值上调用刻度;也就是说,它正在调用y("This is long")
,这会导致 NaN,因为“This is long”不在比例中。我不知道它为什么这样做。
这是一个显示问题的小提琴。如果您注释掉该.tickValues
行,则轴标签会正确显示。如果该行未注释,则标签不起作用。
在d3中为序数轴设置刻度标签的方法是什么?