我想了解如何使用官方API文档中指定的访问器和回调函数来使用d3.csv(url [,accessor] [,callback]) (请参阅点1的链接)。免责声明:我是d3.js的新手。d3.js使用访问器函数和回调导入csv
TL,WR:在调用console.log(data)命令时,我在回调函数中得到一个空的控制台响应,并在应该保存数据的变量上调用console.log时得到未定义。
我发现了两个简单的例子来了解它是如何工作的。
- API本身有一个例子:Chart-data at tonygarcia.me
要执行这些我已经创建既为代码的HTML文件,然后使用一个CSV文件:d3.js API at github.com
python -m SimpleHTTPServer 8888 &
启动一个简单的服务器。 案例1:API官方文档。
在HTML:
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="http://mbostock.github.com/d3/d3.js">
</script>
</head>
<body>
<script type="text/javascript">
var datas;
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);
datas = rows;
});
</script>
</body>
</html>
的CSV(example.csv):
Year,Make,Model,Length
1997,Ford,E350,2.34
2000,Mercury,Cougar,2.38
在控制台上的输出(空),然后:
> console.log(datas);
undefined VM2228:2
undefined
预期结果:
[
{"Year": "1997", "Make": "Ford", "Model": "E350", "Length": 2.34},
{"Year": "2000", "Make": "Mercury", "Model": "Cougar", "Length": 2.38}
]
情况2:图表数据在tonygarcia.me
在HTML:
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="http://mbostock.github.com/d3/d3.js">
</script>
</head>
<body>
<script type="text/javascript">
var datas;
// load data from a CSV file
d3.csv('home.csv',
function(d) {
return {
key: d.state,
value: +d.value
};
}, function(dataset){
// code to generate chart goes here
datas = dataset;
console.log(dataset);
});
</script>
</body>
</html>
的CV(home.cvs):
state,value
Alabama,71.6
Alaska,22.4
Arizona,147.5
Arkansas,59.9
<truncated>
在控制台上的输出(空)然后:
> console.log(datas);
undefined VM2265:2
undefined
预期的结果(你可以尝试在网页上):
那么,我究竟做错了什么?如果我只使用没有访问器的回调函数,那么一切正常。使用访问器将数据从sting格式化为f.e是很有趣的。数。
谢谢大家的帮助!
最佳,
迈克尔
编辑:更正:tonygarcia.com - > tonygarcia。我
我确认你上面说的。复制你的代码和csv,一切和你说的一样。 – VividD
我试着从托尼加西亚网站加载d3.v3.min.js到你的例子,它没有改变任何东西。 – VividD
我也试过,得到了同样的结果。这就排除了版本不兼容的问题,因为我们使用与他相同的d3.js代码。我真的不明白发生了什么事。它可能是关于python服务器吗? – mgp