我有一个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,返回输出范围中的相应值。”
此预期日期是否采用其他格式?谢谢。
答案 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