2014-03-28 41 views
2

我下面舉個例子d3.time秤回NaN的

http://jsfiddle.net/BSB42/

,我似乎無法找出爲什麼X比例不工作,我(獲得的NaN我的CX值)。下面是我的代碼的摘錄:

var parse = d3.time.format("%Y").parse; 

var data = [ 
    { year: "2008", number : 3}, 
    { year: "2009", number : 10}, 
    { year: "2010", number : 17}, 
    { year: "2011", number : 23}, 
    { year: "2012", number : 34}, 
    { year: "2013", number : 50} 
]; 



for (var i = 0; i < data.length; i++) { 
    var d = data[i]; 
    d.year = parse(d.year); 
}; 


var yearScale = d3.time.scale() 
    .domain(d3.extent(data, function (d) { return d.year;})) 
    .range(50, window.innerWidth - 50); 

var numberScale = d3.scale.linear() 
    .domain([0, d3.max(data, function (d) { return d.number;})]) 
    .range([50, window.innerHeight - 50]); 


svg.selectAll("circle") 
    .data(data) 
    .enter() 
    .append("circle") 
    .attr({ 
     cx: function (d) { return yearScale(d.year); }, 
     cy: function (d) { return window.innerHeight - numberScale(d.number)}, 
     r: 4, 
     fill: "#fff", 
     stroke: "#78B446", 
     "stroke-width": 4 
    }) 

回答

5

.range()需要一個數組中的yearScale所以改爲.range([50, window.innerWidth - 50]);。你已經爲numberScale做了正確的。

已更新jsFiddle

+0

哇,這麼愚蠢的錯誤。一直盯着它。謝謝! – victormejia

+1

我的技巧是'console.log(yearScale.range());'並且看到它只返回50而不是數組值。 –