由于某些原因,我无法使用 d3.csv(...)功能加载任何.csv文件。我所做的是使用上面的函数加载csv文件并将数据直接打印到控制台。
这就是我的所作所为:
我使用记事本创建了一个名为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
我在 irisTest.html 中编写此代码,将数据打印到控制台,检查它是否正常工作。
...
d3.csv("irisData.csv", type, function(error, data){
console.log(data);
});
...
不确定这是否相关,但无论如何我都会提出:为了运行我的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);
所以我期望控制台打印出一个由 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>: "});}"}
...
]
有谁知道发生了什么事?
答案 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中的一个工作示例,检查控制台以查看数据对象。