2016-11-03 2 views
0

저는 시작과 끝 노드가있는 Sankey 차트가 있습니다. 아래 함수를 사용하여 범례를 만드는 경우.샌키 다이어그램의 범례에서 엔터티 제외

필자는 범례 (첫 번째 노드와 끝 노드)에서 특정 노드를 필터링하고 싶습니다.

노드 이름은 항상 같지만 노드 수가 동적으로 변경되므로 색인이 달라집니다.

이 작업이 가능하거나 매우 복잡합니까?

나는 당신이 domain 전화에 필터링을 적용 할 수있는

svg.selectAll('.legendOrdinal .cell') 
 
        .attr('transform', function(d,i) { 
 
         // make 2 column legend 
 
         var row = Math.floor(i/items_in_row) * element[0].offsetWidth/2; 
 
         return 'translate(' + row +',' + (i % items_in_row) * 21 + ')'; 
 
        })

  function render_legend(nodes) { 
 
       var items_in_row = Math.ceil(nodes.length/2); 
 

 
       d3.select(element[0]).select('#legend').remove(); 
 
       var svg = d3.select(element[0]) 
 
        .append("svg") 
 
         .attr('width', '100%') 
 
         .attr('height', ((items_in_row+1) * 25) + 'px') 
 
         .attr('id', 'legend'); 
 

 
       var ordinal = d3.scale.ordinal() 
 
        .domain(nodes.map(function(d) { 
 
         return d.name; 
 
        })) 
 
        .range(color.range()); 
 

 
       // append legend text 
 
       if (nodes.length != 0) { 
 
       svg.append('text') 
 
        .attr('x', 15) 
 
        .attr('y', 15) 
 
        .text('Enabling infrastructure investments:'); 
 
       }; 
 

 
       svg.append("g") 
 
        .attr("class", "legendOrdinal") 
 
        .attr("transform", "translate(20, 40)"); 
 

 
       var legendOrdinal = d3.legend.color() 
 
        .shape("path", d3.svg.symbol().type("circle").size(200)()) 
 
        .shapePadding(5) 
 
        .scale(ordinal); 
 

 
       svg.select(".legendOrdinal") 
 
        .call(legendOrdinal); 
 

 
       svg.selectAll('.legendOrdinal .cell') 
 
        .attr('transform', function(d,i) { 
 
         // make 2 column legend 
 
         var row = Math.floor(i/items_in_row) * element[0].offsetWidth/2; 
 
         return 'translate(' + row +',' + (i % items_in_row) * 21 + ')'; 
 
        }) 
 
      }; 
 

 

답변

1

에 필터 또는 제외 기능을 적용 할 수 있습니까?

.domain(nodes.filter(function(d, i) {return i > 0 && i < N - 1; /*or anything else */}) 
      .map(function(d) { 
        return d.name; 
       })) 
관련 문제