2014-09-27 79 views
-1

我無法找到下面的代碼D3的缺陷:將數據傳遞到D3的功能

//d3.tsv("dictionaries/dictionary-tsv.tsv", 
//  function(d) { return +d.frequency }, 
//  function(error, rows) { console.log(rows);}, 
//  function(d) { drawExample(data) } 
//  ); 

var data = [1,2,12,4,7]; 
drawExample(data); 

function drawExample(frequency) { 

var x = d3.scale.linear() 
    .domain([0, d3.max(frequency)]) 
    .range([0, 420]); 

d3.select(".chart") 
    .selectAll("div") 
    .data(frequency) 
    .enter().append("div") 
    .style("width", function(d) { return x(d) + "px"; }) 
    .text(function(d) { return d; }); 
} 

如果你運行,因爲它是條形圖產生。如果您評論var data和drawExample並取消註釋從tsv獲取外部數據的方法,則它會失敗(Firefox調試器顯示數據已加載,並且沒有未定義的var顯示在任何地方)。另外,計算器鏈接:

csv to array in d3.js」 和 「variable scope in d3 javascript

似乎並沒有幫助。我使用d3.v3.min.js和我的TSV文件如下:

word frequency 
and 1 
be  2 
art 12 
break 4 
cat 7 

我相信,這是我的錯誤,因此任何幫助,將不勝感激!

回答

0

d3.tsv()不會返回任何東西,它是一個異步調用(就像您在使用jQuery發出AJAX請求時一樣)。所以一切都在它的回調中發生。

您的電話應該像這樣的事情:

d3.tsv("dictionaries/dictionary-tsv.tsv", function(data){ 
    drawExample(data); 
}); 

不能100%確定(僅涉及與D3連接器上的JSON - 但它應該是相同的,雖然)

+0

但是,我打電話在回調drawExample(數據),就像你說的,不是嗎? – pebox11 2014-09-27 20:54:11

+0

不,你在'var data = d3.tsv'(你的代碼剛剛更改)中將d3.tsv的結果賦值給var數據,然後在回調函數中傳入'd',但是使用'data'。 – topheman 2014-09-27 21:05:18

+0

是的那部分「var data = d3.tsv」確實發生了變化,但是當我改變它時沒有人回答。無論如何,我現在正在提及發佈的具體問題。對不起,但我做了你的建議,它不起作用。 – pebox11 2014-09-27 21:10:19