2013-07-23 48 views
3

im使用d3.scale.linear()運行一個簡單的條形圖和硬編碼他在這個例子域範圍scale.linear()被返回的NaN

我可以螢火看到aplying寬度的ATTR時我的div,w_bar似乎是NaN。

這是爲什麼?

var w_bar = d3.scale.linear() 
    .domain([0, 107525233]) //harcoded 
    .range(["0px", "290px"]); 

var theList = d3.select("#list").selectAll("div") 
    .data(myJSON); 

theList.enter().append("div") 
    .text(function (d) { return d.v; }) 
    .transition() 
    .duration(1000) 
    .attr("width", w_bar); // Why NaN? 

theList.exit() 
    .remove(); 

這裏的的jsfiddle: http://jsfiddle.net/NAhD9/5/

回答

4

那麼,w_bar不是一個數字,width屬性需要是一個數字。因此,NaN。

如果要規模基礎上,v屬性,在myJSON對象的width屬性,你應該說 .attr("width",function (d) {return w_bar(d.v)})

這是秤在d3是如何工作的,他們是一個函數,該函數在一個參數(規模domain內的一些值),並返回值轉化爲適合您的規模range

更新jsFiddle here

3

你需要使用一個函數來告訴D3你如何希望自己的數據進行交互擴展到創建磁盤陣列:

.attr("width", function(d){ return w_bar(d.v); }) 

這將從構成myJSON數組的對象中獲取所有v屬性,使用w_bar對它們進行縮放,並將其對應矩形的寬度設置爲等於該值。