在D3时间轴上设置滴答间隔,抛出异常

时间:2014-04-28 14:14:08

标签: d3.js

我在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中的一个错误,更有可能是我以某种方式误用它。

1 个答案:

答案 0 :(得分:2)

你有这个:

.ticks([d3.time.minute, 15])

但你想要的是:

.ticks(d3.time.minute, 15)

只有在将特定的值列表传递给函数时,才会生成数组。在这种情况下,您需要使用.tickValues函数