2016-08-18 63 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>