D3.csv没有加载csv文件

时间:2016-04-09 17:51:46

标签: javascript html node.js d3.js

由于某些原因,我无法使用 d3.csv(...)功能加载任何.csv文件。我所做的是使用上面的函数加载csv文件并将数据直接打印到控制台。

这就是我的所作所为:

  1. 我使用记事本创建了一个名为irisData.csv的文件。它包含来自https://archive.ics.uci.edu/ml/datasets/Iris

    的虹膜数据集中的一些数据
    sepal_length,sepal_width,petal_length,petal_width,species
    5.1,3.5,1.4,0.2,Iris-setosa
    4.9,3,1.4,0.2,Iris-setosa
    4.7,3.2,1.3,0.2,Iris-setosa
    4.6,3.1,1.5,0.2,Iris-setosa
    5,3.6,1.4,0.2,Iris-setosa
    5.4,3.9,1.7,0.4,Iris-setosa
    
  2. 我在 irisTest.html 中编写此代码,将数据打印到控制台,检查它是否正常工作。

    ...
    d3.csv("irisData.csv", type, function(error, data){
        console.log(data);
    });
    ...
    
  3. 不确定这是否相关,但无论如何我都会提出:为了运行我的html,我使用Node.js来运行服务器。这是服务器的代码, server.html

         var http = require('http');
         fs = require('fs');
         http.createServer(function(req, res){
            fs.readFile('./irisTest.html', function(err, data){
               if(err){
                  res.writeHead(500, {'Content-type': 'text/plain'});
                  res.end('500 - Internal Error');
               }else{
                  res.writeHead(200, {'Content-type': 'text/html'});
                  res.end(data);
               }
            });
         }).listen(3000);
    
  4. 所以我期望控制台打印出一个由 csv 文件中的数据组成的对象。像这样:

    [
      {data...}
      {data...}
      {data...}
      ...
    ]
    

    然而,我得到的是包含在对象中的 irisTest.html (这是html代码本身)的代码。我意识到我把它放在“irisData.cvs”作为 d3.csv(“irisData.csv”,...)中的路径并不重要,它总是输出我自己的代码,如下所示。所以我认为这可能是csv文件路径的问题,但不应该存在。所有文件都在同一个文件夹中。

     [    
        ...
        {<!DOCTYPE html>: "d3.csv("irisData.csv", type, function(error, data){"}
        {<!DOCTYPE html>: "console.log(data);"}
        {<!DOCTYPE html>: "});}"}
        ...
     ]
    

    有谁知道发生了什么事?

1 个答案:

答案 0 :(得分:1)

如文档here中所述,预期匿名函数而不是type。我引用了doc中的例子:

d3.csv("example.csv", function(d) {
  return {
    year: new Date(+d.Year, 0, 1), // convert "Year" column to Date
    make: d.Make,
    model: d.Model,
    length: +d.Length // convert "Length" column to number
  };
}, function(error, rows) {
  console.log(rows);
});

因此,在您的情况下,读取csv文件应该这样做:

d3.csv("irisData.csv",function(data){
    console.log(data);
},function(error, rows){
   console.log(rows); 
});

这是gist中的一个工作示例,检查控制台以查看数据对象。