D3时间刻度,日期对象返回NaN

时间:2014-02-21 17:10:58

标签: javascript d3.js

我有一个Date对象,我将其传递给D3时间刻度:

var x = d3.time.scale()
    .range([0, main_width-axis_offset]);

x.domain(d3.extent(data, function(d) { return d.date; }));

然后在......

var area = d3.svg.area()
    .x(function(d) { return x(d.date); })

d.date采用以下格式:

d.date = new Date(d.year, d.month-1, d.day);

Mon Jan 20 2014 00:00:00 GMT-0500 (Eastern Standard Time) 

这是一个显示完整代码的小提琴链接:http://jsfiddle.net/goodspeedj/Ds9E6/

文档声明“在输入域中给定日期x,返回输出范围中的相应值。”

此预期日期是否采用其他格式?谢谢。

2 个答案:

答案 0 :(得分:4)

问题在于,您为data获取了x和y的域名,但实际数据位于data.results下。如果您相应地更改了代码,一切正常:

x.domain(d3.extent(data.result, function(d) { return d.date; }));
y.domain([0, d3.max(data.result, function(d) { return d.y0 + d.y; })]);

完成jsfiddle here

答案 1 :(得分:1)

您尚未指定比例的域,仅指定范围。 E.g:

var x = d3.time.scale().range([0, main_width-axis_offset]).domain([minDate, maxDate]);

比例需要范围和域,因为它将一个映射到另一个。因此,您应该在x轴上将日期映射到0以代替“minDate”,并且要映射到任何值的日期main_width-axis_offset代替“maxDate”。

在API文档中:https://github.com/mbostock/d3/wiki/Time-Scales#wiki-domain