2016-08-18 32 views
2

所以,最近我一直在使用D3.js解析CSV文件中的數據。在閱讀斯科特·默裏的「交互式數據可視化」(偉大的書籍和非常豐富的資料)的同時,它解釋瞭如何從CSV中選擇表格中的所有數據。從多個CSV文件解析特定的列/數據

解析CSV的代碼如下所示:

d3.text("three.csv", function(data) { 
      var parsedCSV = d3.csv.parseRows(data); 
      var container = d3.select("#thirdCSV") 
       .append("div") 

       .append("table") 
        .attr("id", "tableThree") 

       .selectAll("tr") 
        .data(parsedCSV).enter() 
        .append("tr") 

       .selectAll("td") 
        .data(function(d) { return d; }).enter() 
        .append("td") 
        .attr("id","three") 
        .text(function(d) { return d; }); 

    }); 

我的項目,我以7個不同的CSV文件,並把它放在一個HTML格式。

編寫7x以上的代碼似乎沒有必要,是否有另一種方法來解析多個CSV文件?如果是這樣,是否還有一種方法只解析特定的列,如列D-F?下面是如何的文件之一是建立一個圖像(CSV文件的其餘部分是相同的格式。 Table One

+0

包裝你的代碼在你的傳遞函數不重複的部分作爲參數 – dandavis

+0

那麼,你有7個不同的CSV?爲什麼不創建一個單一的CSV,這8行? –

+0

@GerardoFurtado正在考慮這樣做,但每個csv都有自己的角色,例如毛利,郵寄費用等等。如果在一個csv中,如何更好地控制每個表格? – fretigason2

回答

0

沒有爲在D3 d3.csv()閱讀CSV文件中的特定function,你應該用它代替的d3.text()因爲它使事情變得更加簡單,因爲你不需要除了使用d3.csv.parseRows(),看看this block例如,

可以使用d3.queue()function的幾個數據文件異步加載,它等待要加載的所有文件在接下來的步驟之前,你應該像這樣使用它:

var q = d3.queue() 
    .defer(d3.csv, "first.csv") 
    .defer(d3.csv, "second.csv") 
    .defer(d3.csv, "third.csv") 
    .... 
    .awaitAll(function(error, results) { 
     if (error) throw error; 
     console.log(results); 
     draw(results) 
    }); 

我也想指出的是,D3.queue()功能不包括在D3 V3默認包,所以你必須單獨加載:

<script src="https://d3js.org/d3-queue.v3.min.js"></script>