Javascript D3.js:通过D3.csv加载平面一维数组,结果为;TypeError:groupData未定义";/使用D3.js加载多个CSV文件
我使用函数exampleData()生成一个平面的一维数组,该数组用于使用d3.js(vesion 3.5.5)生成SVG元素。那很好用 但是当我使用下面提到的函数load()[like dataset=load();]时,这会导致错误TypeError:groupData未定义d3.v3.js:1688:31 有人能帮忙吗?文件data.csv有一个名为x的列标题和另外20行,每行有一个整数。在webbrowser的控制台上进行查询时,数组似乎没有问题 最好的,弗兰克Javascript D3.js:通过D3.csv加载平面一维数组,结果为;TypeError:groupData未定义";/使用D3.js加载多个CSV文件,javascript,asynchronous,d3.js,Javascript,Asynchronous,D3.js,我使用函数exampleData()生成一个平面的一维数组,该数组用于使用d3.js(vesion 3.5.5)生成SVG元素。那很好用 但是当我使用下面提到的函数load()[like dataset=load();]时,这会导致错误TypeError:groupData未定义d3.v3.js:1688:31 有人能帮忙吗?文件data.csv有一个名为x的列标题和另外20行,每行有一个整数。在webbrowser的控制台上进行查询时,数组似乎没有问题 最好的,弗兰克 函数exampleDa
函数exampleData(){
返回[11,12,15,20,18,17,16,18,23,25,5,10,13,19,21,25,22,18,15,13];
}
由于您提供的代码不会引发任何与您描述的错误类似的错误,我猜错误发生在您尝试使用加载的数据集时,因为使用dataset=load()
,dataset
将是未定义的
代码的问题是,load()
没有返回语句
实际上,load()
甚至不能返回任何内容,因为d3.csv()
加载数据异步d3.csv()
不返回任何内容。它启动对给定的csv
的请求,当该请求完成时,它调用回调函数
在代码中调用load()
时,调用后的下一行可能会在加载数据之前执行。如果您这样尝试:
function load() {
d3.csv("data.csv", function(data) {
dataset2 = data.map(function(d) {
return [ +d["x"] ];
});
dataset2= d3.merge(dataset2);
console.log(dataset2);
});
}
load();
console.log("afterLoad");
将首先记录后加载
。稍后,加载数据时,将记录数据集
因此,您必须在回调中处理数据。也许你应该有另一个功能来绘制图表。必须从回调函数调用此函数,如下所示:
function load() {
d3.csv("data.csv", function(data) {
dataset2 = data.map(function(d) {
return [ +d["x"] ];
});
//console.log(dataset2);
dataset2= d3.merge(dataset2);
//console.log(data);
//call the function that needs the data
drawMyChart(dataset2);
});
}
因为您将数据集命名为dataset2
,所以我猜有不止一个数据集。我解释了如何在中加载多个csv文件。这可能会帮助您理解异步编程的概念。您的示例中没有groupData
,您还没有指出哪一行抛出了错误。没有这些,你就不可能回答你的问题。谢谢你的回答。我听说了d3.csv()
的异步行为。您的示例是理解这种“特殊”行为的一个很好的用例。我想实现的是,每当鼠标单击ID为“click1”、“click2”等的按钮时,加载不同的CSV文件。我想这样解决:d3。选择(#click1”)。在(“单击”,函数(){//dataset的新值=加载(); // ..... });代码>但是你用函数load()
和函数中的图表绘制的答案正是我需要的。如果我将函数与输入值一起使用,比如load(filename){d3.csv(filename,.}
,那么我应该有我需要的解决方案。