Javascript 从D3中的多个csv文件导入数据

Javascript 从D3中的多个csv文件导入数据,javascript,arrays,csv,import,d3.js,Javascript,Arrays,Csv,Import,D3.js,我是D3的新手,刚开始做一个项目。我的问题是。 我想从D3中的2个csv文件中导入数据,以用于图形比较。我面临的问题是: 1.如何从多个csv文件导入数据。 2.我可以为每个csv使用一个数组,还是D3只使用一个全局数据数组? 3.是否有方法从csv文件中选择要导入的特定列? 下面是一个示例,我想从单独数组中的每个文件导入“oldVer”,然后使用这两个数组进行处理。这在D3中可行吗?如何实现 csv 1 时间,老的,新的,老的,新的 1180930190394,24,59 2198039159

我是D3的新手,刚开始做一个项目。我的问题是。 我想从D3中的2个csv文件中导入数据,以用于图形比较。我面临的问题是: 1.如何从多个csv文件导入数据。
2.我可以为每个csv使用一个数组,还是D3只使用一个全局数据数组?
3.是否有方法从csv文件中选择要导入的特定列?

下面是一个示例,我想从单独数组中的每个文件导入“oldVer”,然后使用这两个数组进行处理。这在D3中可行吗?如何实现

csv 1
时间,老的,新的,老的,新的
1180930190394,24,59
2198039159094,26,45
315258119432,22,61

csv 2
时间,老的,新的,老的,新的
1184950180435,27,26
2120590129409,13,13
3165222182133,60,54


再次为这个愚蠢的问题感到抱歉,但我在这件事上没有找到什么反馈。任何帮助都将不胜感激。

您只需多次拨打
d3.csv

d3.csv("csv1.csv", function(error1, data1) {
  d3.csv("csv2.csv", function(error2, data2) {
    // do something with the data
  });
});
至于你的第三个问题,不,D3将解析所有内容。不过,没有什么强迫您使用所有数据,因此如果您只对一列感兴趣,只需使用其中的数据即可。

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

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

为了回答你的第三部分

  • 有没有办法从
    csv
    文件中选择某一列作为 进口

  • 不可以,您不能加载
    CSV
    的一部分。但是,您可以加载整个
    CSV
    文件,并有选择地使用其中的一列。您可以参考
    data.newVer
    使用
    newVer
    列数据。

    在d3版本5中,您可以使用
    Promise.all
    加载多个csv文件。例如:

    Promise.all([
        d3.csv("file1.csv"),
        d3.csv("file2.csv"),
    ]).then(function(files) {
        // files[0] will contain file1.csv
        // files[1] will contain file2.csv
    }).catch(function(err) {
        // handle error here
    })
    


    Hi-Lars,由于目标是比较数据,因此两者同时可用,因此需要控制这些嵌套异步调用的执行流,不是吗?如果我们在内部函数中执行某些操作,则无法保证data1将准备就绪。我说得对吗?我在看书。它正在谈论node.js,但也许它会适用。现在,我将立即试用它。我以前读过异步调用,但说不多,我只需要尝试一下。感谢大家的快速响应。如果我在这里,在我引用的链接中,我相信你想要7.2.2控制流模式#2,其中“……我们只想进行一小部分操作,并行启动它们,然后在所有操作完成后执行一些操作。”@FernOfTheAndes不——这正是嵌套所要处理的。只有当第一个请求完成时,我才会发送第二个CSV请求,因此在第二个处理程序函数中,这两个函数都保证可用。我现在明白了……只有当数据从外部调用返回时,内部调用才会运行。很抱歉造成混淆。这也适用于json吗?e、 g.``d3.queue()/*加载多个数据集*/.defer(d3.json,“data1”).defer(d3.json,“data2”).wait(函数(error,data1,data2){if(error){console.log('Something should:'+error);}else{//stuff for graph})```这样做的好方法!谢谢@Abang F,这是我见过的最简单、最清晰的演示:)我可以用它来处理动态数量的文件吗?@blckbird
    Promise.all(fileList.map(d3.csv))。然后(…)