【问题标题】:Javascript d3 no header for 1 of the CSVsJavascript d3 没有 1 个 CSV 的标题
【发布时间】:2021-11-26 03:38:28
【问题描述】:

我已经开始使用 d3 传递一些 CSV 数据,通常我的 CSV 看起来像

num,value
1,2
3,1
5,2

但我正在加载一个文件名为“sample2.csv”的 CSV,它没有任何标题,看起来就像

5,3
7,5

,我使用的代码看起来像

d3.queue()
.defer(d3.csv, "sample1.csv").defer(d3.csv, "sample2.csv").defer(d3.csv, "sample3.csv")
.await(function(error, sample1, sample2, sample)
{
}

我已经阅读了没有标题的 CSV,您需要使用 csvParseRows

这是正确的吗?以及如何将 csvParseRows 传递到“sample2.csv”的代码中

有人对 d3 了解很多吗?如何做到这一点?

谢谢

【问题讨论】:

  • 正在输入一个答案,但意识到它与this 重叠很多。本质上是一样的,只是你不连接一行标题并使用 d3.csvParseRows 而不是 d3.csvParse,如果不清楚,我可以添加一个答案。
  • 嗨@AndrewReid 谢谢。我查看了该页面,但没有一个示例使用 defer,这就是我卡住的地方,我不确定在使用 defer 方法时在哪里添加 csvParseRows。有什么建议吗?
  • 所以我相信我正在取得进步。我已经对“sample2.csv”做了这个,但是我得到了错误“t.charCodeAt 不是一个函数”d3.queue().defer(d3.csv, "sample1.csv").defer(d3.csv, "sample2.csv", function(text){console.log(d3.csvParseRows(text));console.log(d3.csvParseRows(text));}987654330@.await(function(error, sample1, sample2, sample)@987654332 @} 有什么建议吗?谢谢
  • 下班后我看看能不能创建一个例子。目前这样做的能力有限。

标签: javascript csv d3.js


【解决方案1】:

如果使用 d3.queue,你可以像往常一样解析 csv 的文本,然后在 await 函数中,你需要解析行:

d3.queue()
  .defer(d3.text,"test.csv")
  .await(ready);
  
function ready(error, text) {
    var csv = d3.csvParseRows(text);    
    console.log(csv);
    /* use csv data */
}

csvParseRows 方法采用表示文件内容的文本字符串,而不是文件的 url。我们可以使用 d3.text 获取这些内容,加载后进行处理。


虽然我们不需要 d3-queue,但使用 d3v5 会更高,因为我们可以使用非常相似的方法而无需:

d3.text("test.csv").then(ready)
  
function ready(text) {
    var csv = d3.csvParseRows(text);
    
    console.log(csv);
    /* use csv data */
}

如果我们有很多文件:

Promise.all([d3.text("file1.csv"),d3.text("file2.csv")]).then(ready);
  
function ready(files) {
    var csvs = files.map(function(file) {
        return d3.csvParseRows(file);
    });
    
    console.log(csvs);
    
    /* use csv data */
}

【讨论】:

    猜你喜欢
    • 2018-11-30
    • 2012-12-01
    • 2016-10-19
    • 2017-08-11
    • 2011-03-24
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 2019-03-30
    相关资源
    最近更新 更多