D3如何过滤来自多个数据集的数据

时间:2016-02-04 14:45:27

标签: 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 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,

我正在使用此CSV创建“启动点”的下拉菜单,这会过滤与“起点”相关联的所有“名称”

我想创建一个额外的数据集,允许我为每个'起始点'添加一些额外的细节,例如'x',如下所示:(我想用它来创建一些独特的svg行,每个'起点'点')

var newdata = [
 {'starting point': 'Berkner Island', 'x': '1'}, 
 {'starting point': 'Hercules Inlet', 'x': '2'},
 {'starting point': 'Ronne Ice Shelf','x': '3'}
];

我正在过滤这样的数据

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

updateCSV(filter);    // CSV data function
updateNewdata(filter);   // Newdata function

加载时,仅过滤CSV数据。第二个数据集'newdata'加载所有没有应用过滤器的条目。

https://plnkr.co/edit/TgZxbaPdyERWeaG5i3HX?p=info

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

更新

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

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);

1 个答案:

答案 0 :(得分:0)

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

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