Json 使用queue()更新图表模式是什么?

Json 使用queue()更新图表模式是什么?,json,csv,d3.js,tsv,Json,Csv,D3.js,Tsv,我想这个论坛上的大多数人都知道可重用图表中的enter()、update()、exit()模式 我的问题是,如何使用这种模式来预加载数据 因为e,p,e模式的本质是从闭包中回调数据函数,根据定义,队列被调用一次,然后调用单独的函数,有没有方法将其用于更新图表 更新:我想将排队的数据文件作为函数参数传入,然后访问该对象以进行更新 我的初始代码如下所示: rateById = d3.map(); queue() .defer(d3.csv, "./data/femaleChloropleth.

我想这个论坛上的大多数人都知道可重用图表中的enter()、update()、exit()模式

我的问题是,如何使用这种模式来预加载数据

因为e,p,e模式的本质是从闭包中回调数据函数,根据定义,队列被调用一次,然后调用单独的函数,有没有方法将其用于更新图表

更新:我想将排队的数据文件作为函数参数传入,然后访问该对象以进行更新

我的初始代码如下所示:

rateById = d3.map(); 

queue() 
.defer(d3.csv, "./data/femaleChloropleth.csv", function(d) { rateById.set(d.endneighborhood, d.rides); }) 
.await(ready); 

function ready(error, femaleChloropleth) { 

console.log(femaleChloropleth);
但是console.log()返回一个空数组,我知道d3正在访问csv文件。如果我删除映射函数,它可以正常工作。有什么想法吗?

可以将
队列()
库看作是一种一次进行多个数据调用的方法,然后在加载数据时对结果调用函数。它非常类似于
d3.xhr
函数,如
d3.json

要加载单个外部数据文件,可以使用以下方法:

d3.json("path/to/file.json", ready)

function ready(error, jsonData) {
  var selection = d3.selectAll(".something")
      .data(jsonData);
  selection.enter().append("something").attr(etc..);
  selection.attr(etc..);
  selection.exit.remove();
});
如果要加载多个文件并一起使用这些数据,则必须嵌套这些调用,即,
d3.json
调用,并等待每个文件按顺序加载。相反,
queue()
允许我们执行相同的操作,但同时加载多个文件:

queue()
  .defer(d3.json, "path/to/file.json")
  .defer(d3.csv, "path/to/file.csv")
  .defer(d3.tsv, "path/to/file.txt")
  .await(ready);

function ready(error, jsonData, csvData, tsvData) {
  //now you can use all three data sets in your general update paradigm
  //and did not have to wait for all three to load sequentially
}

我建议考虑使用
queue()
,就像使用
d3.json()
一样。您可以使用queue的结果(通常是几个json对象)输入到任何d3 enter/update/exit范例中。如何按照您的建议输入它们?好的,这就是我的想法。在这种情况下使用console.log时,我不会返回csv数组:var rateById=d3.map();queue().defer(d3.csv,“./data/femaleChloroleth.csv”,函数(d){rateById.set(d.endneighbory,d.rides);}.wait(ready);函数就绪(错误,FemaleColpleth){console.log(FemaleColpleth);如果只加载一个数据集,即:“/data/FemaleColpleth.csv”,则不需要
队列()
,按照上面的例子使用d3.json就足够了。你认为这会导致我的参数丢失问题吗?可能不会,也许你可以在JSFIDLE上举一个错误的例子,或者类似的东西?试着在
ready
函数的第一行中添加类似的内容:
if(error)控制台。error(error)
然后在运行后检查控制台。如果看不到错误的工作示例,则很难进一步排除故障