我在D3中有一段简单的JavaScript构建时间轴:
var xScale = d3.time.scale()
.domain([testData.datapoints[0].at, testData.datapoints[testData.datapoints.length - 1].at])
.range([0, (new Date(testData.datapoints[testData.datapoints.length - 1].at - testData.datapoints[0].at).getTime() / interval) * 21]),
xAxis = d3.svg.axis()
.scale(xScale)
.orient("bottom")
.ticks([d3.time.minute, 15]) /* This line causes an exception */
.tickFormat(d3.time.format("%d/%m/%y %H:%M:%S")),
In the D3 documentation on Time Scales ticks它说
While to create ticks at 15-minute intervals, say: scale.ticks(d3.time.minute, 15);
但我得到一个例外:
第9204行的未处理异常,d3.js第7列
0x800a138a - JavaScript运行时错误:预期的功能
(N.B。将违规行从xAxis
链移动到xScale
链没有任何区别,它仍会在同一个地方抛出相同的异常。将违规行更改为
.ticks(20)
删除了异常但不是我追求的功能。)
抛出错误的D3行是d3.js中此函数的最后一行:
scale.ticks = function(interval, skip) {
var extent = d3_scaleExtent(scale.domain()), method = interval == null ? tickMethod(extent, 10) : typeof interval === "number" ? tickMethod(extent, interval) : !interval.range && [ {
range: interval
}, skip ];
if (method) interval = method[0], skip = method[1];
return interval.range(extent[0], d3_time_scaleDate(+extent[1] + 1), skip < 1 ? 1 : skip);
};
抛出异常时skip
未定义。
D3 JavaScript系列有什么问题?它是从文档中复制的,但我怀疑它是D3中的一个错误,更有可能是我以某种方式误用它。
答案 0 :(得分:2)
你有这个:
.ticks([d3.time.minute, 15])
但你想要的是:
.ticks(d3.time.minute, 15)
只有在将特定的值列表传递给函数时,才会生成数组。在这种情况下,您需要使用.tickValues函数