D3.js D3如何从多个数据集中筛选数据

D3.js D3如何从多个数据集中筛选数据,d3.js,D3.js,我使用的数据来自一个CSV,看起来像这样 ,,Name,First names,s,r,Nat,born,starting point,starting date,arrival date,days,km,Assist,Support,Style,note,arrival date 2 1,1,KAGGE,Erling,,,Nor,1/15/1963,Berkner Island,11/18/1992,1/7/1993,50,appr. 1300,n,n,solo,first solo unas

我使用的数据来自一个CSV,看起来像这样

,,Name,First names,s,r,Nat,born,starting point,starting date,arrival date,days,km,Assist,Support,Style,note,arrival date 2
1,1,KAGGE,Erling,,,Nor,1/15/1963,Berkner Island,11/18/1992,1/7/1993,50,appr. 1300,n,n,solo,first solo unassisted,
2,2,ARNESEN,Liv,f,,Nor,6/1/1953,Hercules Inlet,11/4/1994,12/24/1994,50,1130,n,n,solo,first woman unassisted,
var filter = data.filter(function(d) {
 return ("Berkner Island" == d['starting point'])
});

updateCSV(filter);    // CSV data function
updateNewdata(filter);   // Newdata function
我用这个CSV创建了一个“起点”下拉菜单,它过滤了所有与“起点”相关的“名称”

var newdata = [
 {'starting point': 'Berkner Island', 'x': '1'}, 
 {'starting point': 'Hercules Inlet', 'x': '2'},
 {'starting point': 'Ronne Ice Shelf','x': '3'}
];
我想创建一个额外的数据集,它允许我向每个“起点”添加一些额外的细节,如“x”,如下所示:(我想使用它创建一些对每个“起点”唯一的svg行)

我正在像这样过滤数据

,,Name,First names,s,r,Nat,born,starting point,starting date,arrival date,days,km,Assist,Support,Style,note,arrival date 2
1,1,KAGGE,Erling,,,Nor,1/15/1963,Berkner Island,11/18/1992,1/7/1993,50,appr. 1300,n,n,solo,first solo unassisted,
2,2,ARNESEN,Liv,f,,Nor,6/1/1953,Hercules Inlet,11/4/1994,12/24/1994,50,1130,n,n,solo,first woman unassisted,
var filter = data.filter(function(d) {
 return ("Berkner Island" == d['starting point'])
});

updateCSV(filter);    // CSV data function
updateNewdata(filter);   // Newdata function
加载时,仅过滤CSV数据。第二个数据集“newdata”加载所有条目,但不应用任何筛选器

我的问题是,是否可以使用第二个数据集,并通过共享值过滤两个不同的数据集

更新

我设法解决了,是的,这是可能的。我不理解函数中的回调可以有唯一的名称,而不仅仅是“data”。一旦我这样做了,并为我的每个数据集创建了两个不同的过滤器,它就工作了

function updateCSV(CSVdata) {
    ...
    .data(CSVdata)
};

function updateNewdata(newdata) {
    ...
    .data(newdata)
};


// FILTER
var filtera = CSVdata.filter(function(d) {
   return ("Berkner Island" == d['starting point'])
});

var filterb = newdata.filter(function(d) {
   return ("Berkner Island" == d['starting point'])
});

updateCSV(filtera);
updateNewdata(filterb);

我认为问题就在这里。实际上,您并没有使用传入的数据

// should this say 'newdata' not 'data'?
function updateNewdata(data) {
  var position = canvas
   .selectAll(".position")
   .data(newdata)

我认为问题就在这里。实际上,您并没有使用传入的数据

// should this say 'newdata' not 'data'?
function updateNewdata(data) {
  var position = canvas
   .selectAll(".position")
   .data(newdata)

我不确定。如果我更改了该值,将为CSV数据中的每个“名称”创建一个名为“.position”的组。我只想为“newdata”中的每个“起点”加载此组。是否将正确的数据传递到
updateNewData
?现在,您传入
updateNewData(过滤器)
。应该是
updateNewData(newdata)
?是的,我想是的,我从newdata下载的数据很好,只是放错了位置或者没有正确过滤。在不做其他事情的情况下删除过滤函数不会有任何作用。我不确定。如果我更改了该值,将为CSV数据中的每个“名称”创建一个名为“.position”的组。我只想为“newdata”中的每个“起点”加载此组。是否将正确的数据传递到
updateNewData
?现在,您传入
updateNewData(过滤器)
。应该是
updateNewData(newdata)
?是的,我想是的,我从newdata下载的数据很好,只是放错了位置或者没有正确过滤。在不执行其他操作的情况下删除过滤器函数不会起任何作用。