2015-08-04 28 views
0

Я новичок и пытаюсь поиграть с моими данными. Я сначала визуализирую эти круги следующим образом:Как выбрать вложенные элементы данных в d3

circle = svg.selectAll('circle') 
     .data(dataFile) 
     .enter() 
     .append("circle") 
     .attr("stroke", "black") 
     .attr("id", function(d,i){return "id_" + i.toString();}) 
     .attr("class", function(d){return "Color_" + d.Cyl;}) 
     .attr("fill", function(d) {return color(d.Cyl);}) 
     .attr("cx", function(d) { return Scale.xScale(d.Weight); }) 
     .attr("cy", function(d) { return Scale.yScale(d.DealerCost); }) 
     .attr("r", r) 
     .call(drag); 

Затем я использую функцию nest() для группировки своих данных.

var data = d3.nest() 
        .key(function(d) { return d.Cyl;}) 
        .rollup(function(d) { 
        return d3.sum(d, function(g) {return Number(g.value); }); 
    }).entries(csv); 

Наконец я пытаюсь перевести круги, основанные на некоторых логик и это работает отлично.

for(j=0; j<data.length;j++) 
    { 
      svg   
       .selectAll(".Color_" + data[j].key) 
       .transition() 
       .delay(function(d,i) { return 100; }) 
       .duration(1000) 
       .ease("linear") 
       .attr("cx", function(d,i) { return Scale.xScale(data[j].key})  
       .attr("cy", function(d,i) { return height - (i/val);}) 
    } 

Однако некоторые эксперты сказали мне, если я использую Для цикла с d3.selection существует высокая вероятность того, что я делаю что-то неправильно. Поэтому я попытался преобразовать последнюю часть своего кода в код ниже, но он не работает. Есть идеи?

svg 
     .selectAll(function(d){return ".Color_" + d.key;}) 
     .transition() 
     .delay(function(d,i) { return 100; }) 
     .duration(1000) 
     .ease("linear") 
     .attr("cx", function(d,i) { return Scale.xScale(d.key})  
     .attr("cy", function(d,i) { return height - (i/val);}) 
    } 

ответ

0

В своем первом блоке коды вы назначаете ссылку на кружки вы прилагаемые к переменным circle. Чтобы добавить переход к этому выбору, вы должны быть в состоянии использовать следующий код:

circle 
    .transition() 
    .delay(function(d,i) { return 100; }) 
    .duration(1000) 
    .ease("linear") 
    .attr("cx", function(d,i) { return Scale.xScale(d.key); })  
    .attr("cy", function(d,i) { return height - (i/val); }); 

Там нет необходимости делать второй выбор при использовании его таким образом.

+0

Спасибо за ответ, но это переведет все круги вместе. Я попытался сгруппировать свои круги, и я хочу выбрать круги, которые попадают в каждую группу, а затем переводить их. Имеет ли это смысл? –

+0

Ну, читайте свой вопрос, группировка кругов на самом деле не очевидна. Вам нужно предоставить дополнительную информацию о том, как вы хотите группировать и как выглядят ваши данные. Возможно, вы могли бы попытаться настроить JSFiddle, чтобы поиграть. – altocumulus

Смежные вопросы