D3中的过滤选项

Filtering option in D3

本文关键字:选项 过滤 D3      更新时间:2023-09-26

我正在研究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.p name,所以series[0]是第一个坐标名这行不通。我需要在类中添加任何类吗?这一点我不是很清楚。我应该怎么做才能根据名称过滤数据?

如果我理解你的代码:

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

看起来您打算使用var selected = $(this).attr('name'),但从未将其与任何东西进行比较。

这一行:

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

我怀疑你想比较d.selectedselected。现在,这只是我的假设(你知道他们说的假设),但鉴于我对D3的经验,series.stack.filter将迭代series.stack中的元素,所以你需要确保d.selected是你想要的属性。