2014-02-21 43 views
1

我有我傳遞給D3的時間尺度Date對象:D3時間表與日期對象返回NaN的

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,返回輸出範圍中的對應值。」

預計日期格式不同嗎?謝謝。

回答

4

的問題是,你得到x和y的域爲data,但真正的數據是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

+0

非常感謝! – JamesE

1

您還沒有爲比例指定域,只有範圍。例如:

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

+0

我確實有域集,我只是沒有包括它,因爲它不是問題的一部分(編輯包含它)。 x.domain(d3.extent(data,function(d){return d.date;})); – JamesE

相關問題