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