2013-06-19 75 views
1

我正在使用D3(Rickshaw框架),我必須使用名稱來過濾數據。D3中的過濾選項

以下是人力車用於創建圓圈的代碼。

var nodes = graph.vis.selectAll("path").data(series.stack.filter(function(d) { 
    return d.y !== null 
})).enter().append("svg:circle").attr("cx", function(d) { 
    return graph.x(d.x) 
}).attr("cy", function(d) { 
    return graph.y(d.y) 
}).attr("fill-opacity", 1.0).attr('transform', 'translate(22,0)').attr("r", function(d) { 
    return ("r" in d) ? d.r : graph.renderer.dotSize 
}); 

我試圖過濾等

$('#BestBrands input').on("change", function() { 
    console.log("called") 
    var selected = $(this).attr('name'), 
     display = this.checked ? "inline" : "none"; 
    console.log(selected) 

    graph.vis.selectAll(".filter") 
     .data(series.stack.filter(function(d) { 
      return series.name[0] == selected 
     }))  
     .attr("display", display); 
}); 

//series.name中的數據等於在d3.js到d.name所以系列[0]是第一座標名稱 It`沒有工作。我需要在課堂上添加任何課程嗎?我不清楚這一點。我應該在這裏做什麼來根據名稱過濾數據?

回答

1

如果我理解你的代碼:

graph.vis.selectAll("path") 
    .data(series.stack.filter(function(d){ 
     //should return a boolean 
     return selected === 'something'; 
     })) 
    .attr("display", display); 
}); 

編輯:

$('#BestBrands input').on("change", function() { 
    console.log("called") 
    var selected = $(this).attr('name'), 
     display = this.checked ? "inline" : "none"; 
    console.log(selected) 

    graph.vis.selectAll(".filter") 
     .data(series.stack.filter(function(d) { 
      return series[0].name == selected //assuming series[] is an array 
     }))  
     .attr("display", display); 
}); 
0

看起來你打算使用var selected = $(this).attr('name')但它永遠不會比任何東西。

在這一行:

series.stack.filter(function(d){ return d.selected }) 

我懷疑你想比較d.selectedselected。現在,這只是我假設(並且你知道他們假設的意思),但鑑於我對D3的經驗,series.stack.filter將迭代series.stack中的元素,因此您需要確保d.selected是您想要的屬性。

+0

錯字!請檢查編輯的問題兄弟! – Ash