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

questionAnswers(1)

yourAnswerToTheQuestion