在Javascript中加载多个CSV文件

时间:2014-02-19 22:09:16

标签: javascript csv d3.js parallel-coordinates

我有点困惑我需要使用javascript加载多个CSV文件,我需要更改每个加载的数据集的某些属性。所以基本上我使用这个名为d3的框架,我想加载3个csv文件,然后对于每个csv文件,我需要更改为平行坐标图绘制的线条颜色。目前我正在使用三个数据加载,但这会弄乱我的情节,我的价值已经全部结束。

 // load csv file and create the chart
d3.csv('X.csv', function(data) {
pc = d3.parallelCoordinates()("parallelcoordinates")
    .data(data)
    .color(color)
    .alpha(0.4)
    .render()
    .brushable()  // enable brushing
    .interactive()  // command line mode

var explore_count = 0;
var exploring = {};
var explore_start = false;
pc.svg
    .selectAll(".dimension")
    .style("cursor", "pointer")
    .on("click", function(d) {
        exploring[d] = d in exploring ? false : true;
        event.preventDefault();
        if (exploring[d]) d3.timer(explore(d,explore_count,pc));
});

我做了以上三次。现在发生的是,所有数据都绘制在同一个图形上,但随后值重叠(基本上它们的三个图形在彼此之上)。我希望将它集成在一起,我认为最好的方法是巧妙地加载JS文件并以某种方式操作它。我不知道怎么回事。有人会告诉我我将如何实现这一目标吗?

2 个答案:

答案 0 :(得分:7)

这个帖子很有用:https://groups.google.com/forum/#!msg/d3-js/3Y9VHkOOdCM/YnmOPopWUxQJ

链接中的最佳解决方案(IMO)是:

  var rows1, rows2, remaining = 2;

  d3.csv("file1.csv", function(csv) {
    rows1 = csv;
    if (!--remaining) doSomething();
  });

  d3.csv("file2.csv", function(csv) {
    rows2 = csv;
    if (!--remaining) doSomething();
  });

  function doSomething() {
   // … do something with rows1 and rows2 here …
  }

答案 1 :(得分:2)

您可以使用d3 queue同时加载文件。一个例子;

d3.queue()
.defer(d3.csv, "file1.json")
.defer(d3.csv, "file2.json")
.defer(d3.csv, "file3.json")
.await(function(error, file1, file2, file3) {
    if (error) {
        console.error('Oh dear, something went wrong: ' + error);
    }
    else {
        doSomeStuff(file1, file2, file3);
    }
});