d3 v4: mesclar as seleções de entrada e atualização para remover o código duplicado
Eu entendi aquilomerge
pode ser usado para combinar seleções de entrada e atualização no d3 v4, como no exemplo simples aqui:https://bl.ocks.org/mbostock/3808218.
Eu tenho um gráfico de dispersão no qual várias variáveis são exibidas em um eixo x compartilhado, para diferentes grupos selecionados por uma caixa suspensa. Quando um novo grupo é selecionado, o conjunto geral de pontos de dados é atualizado, com pontos para cada variável adicionada assim:
.each(function(d, i) {
var min = d3.min(d.values, function(d) { return d.value; } );
var max = d3.max(d.values, function(d) { return d.value; } );
// Join new data with old elements
var points = d3.select(this).selectAll("circle")
.data(d.values, function(d) { return (d.Plot); } );
// Add new elements
points.enter().append("circle")
.attr("cy", y(d.key))
.attr("r", 10)
.style("opacity", 0.5)
.style("fill", function(d) { return elevColor(d.Elevation); })
.merge(points) //(?)
.transition()
.attr("cx", function(d) { return x((d.value-min)/(max-min)); });
// Remove old elements not present in new data
points.exit().remove();
Todo esse código é amplamente duplicado para a seleção geral de entrada e novamente na seleção geral de atualização (em oposição às variáveis individuais), o que parece menos do que ideal. Como seriamerge
ser usado para remover esse código duplicado?
O exemplo completo está aqui:http://plnkr.co/edit/VE0CtevC3XSCpeLtJmxq?p=preview