2016-11-03 11 views
0

私は開始ノードと終了ノードを持つSankeyチャートを持っています。 以下の関数を使用して凡例を作成するとします。Sankey Diagramの凡例からエンティティを除外します

凡例(最初と最後のノード)から特定のノードをFILTERしたいと思います。

ノード名は常に同じですが、ノードの数が動的に変化すると、そのインデックスは異なります。

これは可能ですか、非常に複雑ですか?

は私が

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コールにフィルタリングを適用することはできますか?

.domain(nodes.filter(function(d, i) {return i > 0 && i < N - 1; /*or anything else */}) 
      .map(function(d) { 
        return d.name; 
       })) 
関連する問題