2013-06-19 2 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 равно d.name в d3.js так серии [0] является первым согласовывает имя Оно деталь A. ` не работает. Нужно ли добавлять класс в класс? Я не совсем понимаю это. Что мне делать, чтобы фильтровать данные в соответствии с именем?

ответ

1

Если я понял ваш код:

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

EDIT:

$('#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.selected с selected. Теперь, это только я предполагаю (и вы знаете, что они говорят о приеме), но, учитывая мой опыт работы с D3, series.stack.filter будет перебирать элементы в series.stack, поэтому вам нужно убедиться, что d.selected - это свойство, которое вы хотите ,

+0

Typo !! проверьте отредактированный вопрос bro !! – Ash

Смежные вопросы