2016-07-08 9 views
0

Я пытаюсь построить интерактивную диаграмму рассеяния. Поэтому я подаю различные цвета, чтобы мои данные с помощью выпадающего списка, как это:D3 Фильтр через selectAll после перехода

function color_drop_update (select, checkbox) { 
    if (select == "gender") { 
     holder.selectAll(".dot").style("fill", colorf_gender); 
     holder.selectAll(".legend rect").style("fill", color_gender); 
    } 

Я также могу изменить проложенную ось через radioboxes и переход так:

function transition(dimension) { 
    if (dimension == "pca") { 
     var xMap = xMap_pca; 
     var yMap = yMap_pca; 

     xScale.domain([d3.min(data, xValue_pca)-1, d3.max(data, xValue_pca)+1]); 
     yScale.domain([d3.min(data, yValue_pca)-1, d3.max(data, yValue_pca)+1]); 
    } 
    else if (dimension == "tsne") { 
     var xMap = xMap_tsne; 
     var yMap = yMap_tsne; 

     xScale.domain([d3.min(data, xValue_tsne)-1, d3.max(data, xValue_tsne)+1]); 
     yScale.domain([d3.min(data, yValue_tsne)-1, d3.max(data, yValue_tsne)+1]); 
    } 

    // Update old 
    circles.attr("class", "update") 
     .transition() 
      .duration(0) 
      .attr("cx", xMap) 
      .attr("cy", yMap); 

    //Update Axis 
    holder.select(".xaxis") 
     .transition() 
      .duration(0) 
     .call(xAxis); 
    holder.select(".yaxis") 
     .transition() 
      .duration(0) 
     .call(yAxis); 

} 

Что работает отлично:

  • Различные фильтры и информация о цвете до перехода
  • Различные фильтры и цветовая информация сохраняются после перехода: первый фильтр, то переход (предназначенный)

Что НЕ работает:

  • Выберите ось и фильтр после этого: то первый переход фильтр!

Приятно оценить любые подсказки и помощь!

ответ

1

Наконец я получил его:

важно, что вы упоминаете класс маркеров даже снова перехода одного:

 circles.attr("class", "update") 
     .transition() 
      .duration(0) 
      .attr("cx", xMap) 
      .attr("cy", yMap) 
      .attr("class", "dot");