D3.js D3JS数据过滤

D3.js D3JS数据过滤,d3.js,D3.js,我正在尝试筛选数据集,以便仅显示某些选定元素的标签。这里显示的过滤器似乎可以工作,只是它创建了数千个空白元素,这显然是我想要避免的。这是因为过滤器位于append之后,但如果我将过滤器移动到append语句上方,它将中断 我做错了什么 var labels = svg.selectAll("text.label") .data(partition.nodes(bp.data.preparedData)) .enter() .append("text") .fi

我正在尝试筛选数据集,以便仅显示某些选定元素的标签。这里显示的过滤器似乎可以工作,只是它创建了数千个空白元素,这显然是我想要避免的。这是因为过滤器位于append之后,但如果我将过滤器移动到append语句上方,它将中断

我做错了什么

  var labels = svg.selectAll("text.label")
    .data(partition.nodes(bp.data.preparedData))
    .enter()
    .append("text")
    .filter(function(d){return d.ci_type === 'type'})
      .attr("class", "label")
      .attr("transform", function(d) { return "translate(" + arc.centroid(d) + ")"; })
      .text(function(d, i) { return d.name } );

听起来您想在将数据传递给D3之前对其进行过滤。也就是说,您的代码是

var labels = svg.selectAll("text.label")
   .data(partition.nodes(bp.data.preparedData).filter(
            function(d){return d.ci_type === 'type'}))
   .enter()
   .append("text")
   .attr("class", "label")
   .attr("transform", function(d) { return "translate(" + arc.centroid(d) + ")"; })
   .text(function(d, i) { return d.name } );