【问题标题】:Trying to load simple CSV file into D3 with queue.js尝试使用 queue.js 将简单的 CSV 文件加载到 D3
【发布时间】:2016-04-10 10:52:02
【问题描述】:

我是 Web 开发的新手,正在尝试弄清楚如何将 CSV 数据加载到 D3.js 中,使用 queue.js 确保在执行代码的下一步之前完全加载数据(其中将使用数据绘制图表)。

我已经无休止地用谷歌搜索了这个,但似乎无法理解 queue.js 的工作原理。

我有以下代码,但不明白为什么它不起作用。

//Create a queue. First load CSV data, then run a function on the data once fully loaded.
queue()
.defer(d3.csv, "Workbook1.csv")
.await(makeChart(mydata));


//create global variable 'mydata' to store CSV data;

var mydata = [];

//d3 CSV loading function - load data into global variable 'mydata' and convert test scores to numeric format.

d3.csv('Workbook1.csv', function(data) {

    mydata = data;
    mydata.forEach(function(d){ d['Test_Score'] = +d['Test_Score']; });
    console.log(mydata); 

});

//create function that will print my data to the console. Once I figure this out, I'll put in some d3 code to actually make the chart.

function makeChart(data) {
  console.log(data);
  console.log("everything ran");
 };

我在控制台中收到以下错误: “未捕获的类型错误:无法读取未定义的属性‘应用’”。

我知道函数 'makeChart' 正在运行,因为我得到了 'everything run' 作为输出。但由于某种原因,它没有传入我的“mydata”变量。

d3.csv 函数中的 console.log 可以正常工作并输出正确的值。但是 makeChart 函数中的 console.log(data) 在控制台中显示为“未定义”。

为这个简单的问题道歉,但我对此非常陌生,我从谷歌搜索中找到的示例并没有让我解决这个问题。

谢谢,

J

【问题讨论】:

  • 您的 html 页面是本地的还是服务器上的?因为如果我是真的,d3.csv('XXXX.csv', function(data)... 仅在您的页面位于服务器上时才有效。解决方法是here

标签: javascript csv d3.js queue.js


【解决方案1】:

你这样做:

queue()
.defer(d3.csv, "Workbook1.csv")
.await(makeChart(mydata));//here you are calling the function makeChart

应该是这样的:

 queue()
    .defer(d3.csv, "Workbook1.csv") 
    .await(makeChart);//only function name is needed

而制作图表功能应该是这样的:

function makeChart(error, data) {//first param is error and not data
  console.log(data);
  console.log("everything ran");
 }; 

编辑

如果你有多个网址,它会是这样的:

queue()
.defer(d3.csv, "Workbook1.csv")
.defer(d3.csv, "Workbook2.csv")
.await(makeChart);//here you are calling the function makeChart

   function makeChart(error, data1, data2) {//first param is error and not data
      console.log(data1);//workbook1
      console.log(data2);//workbook2
      console.log("everything ran");
     }; 

希望这会有所帮助!

【讨论】:

  • 您能否解释一下,为什么需要错误参数?总的来说,如何知道哪些函数需要错误参数,哪些不需要?它是我创建的所有 javascript 函数都需要的错误参数?
  • 另外,计算机如何知道将 'mydata' 变量传递给 makeChart 函数? MakeChart 将“数据”作为输入,但我没有指定我希望输入为“mydata”。它是怎么知道的?如果我要加载多个数据集,它会选择哪一个?
  • 检查编辑部分,我认为它会清除所有疑虑。回调 makeChart 在所有 ajax 完成时被调用。如果一次加载失败,您会收到错误,则该错误对所有人都很常见。
最近更新 更多