D3.js v4を使用して、ボタンのクリック時に円の半径を更新しようとしています。D3.js円の半径が期待通りに動作しない
smooth transitions between the radiiの代わりに、各更新時に円が再描画されます(「半径1」から「0」まで、次に「半径2」のみに)。 https://jsfiddle.net/4r6hp9my/
はここで円更新コードスニペットです:
echonaxで述べたように var circles = svg.selectAll('circle').data(dataset);
var enter = circles
.enter()
.append('circle')
.attrs({
cx: w/2,
cy: h/2,
fill: colorsScale,
r: function(d,i){
if(i == myCounter){
var x = rScale(d)
return x;
}
}
});
d3.select('#theButton')
.on('click',function(){
myCounter++
if(myCounter == dataset.length){
myCounter = 0;
};
updateData()
});
function updateData(){
circles
.merge(enter)
.transition()
.attr('r',function(d,i){
if(i == myCounter){
return rScale(d);
}
});
labels
.text(function(d,i){
if(i == myCounter){
return d;
}
});
};
最初にフィドルを開いたときのサークル数はいくつですか? – echonax
質問を理解しているかどうかわからない場合、すべてのボタンをクリックすると半径が1次元配列の値に基づいて更新される円が1つしかないはずです –
:)インスペクタを開いてあなたのsvg要素を見ます。あなたのsvgに9つのサークルを追加しました。つまり、それぞれの 'dataset'要素に対して1つです。 – echonax