私の目的は、ポイントのセットを取得し、シリーズのような方法でそれらを(.transition.duration()
)数回動かすことです。javascript d3.js - 散布図上の複数のポイントの移動
コードの例:
d3.csv("X.csv", function(csv) {
// initialize circles at random positions
svg.selectAll("circle")
.data(csv)
.enter()
.append("circle")
.attr("cx", function(d) {
return x(80*Math.random());
})
.attr("cy", function(d) {
return y(500*Math.random());
})
.attr("r", function(d) {
return r(Math.sqrt(10*Math.random()));
})
.style("fill", function(d) {
return color(d.A);
})
.style("opacity", 1.0)
.style("stroke-opacity", 1)
.style("stroke-width", 3)
.style("stroke", function(d) {
return stroke(d.B)
});
// Move #1: moving the marks to their position
svg.selectAll("circle")
.transition().duration(2000)
.attr("cx",function(d) {
return x(+d.C);
})
.attr("cy",function(d) {
return y(+d.D);
})
.attr("r",function(d) {
return r(Math.sqrt(+d.E));
})
.style("opacity", 0.8);
//Move #2: move again to highlight
svg.selectAll("circle")
.transition().duration(2000)
.style("opacity", function(d) {
if (d["A"] == "male") {
return 0.1;
} else if (d["A"] == "female") {
return 0.8;
}
});
}
問題:をそのまま実行すると、#1の移動がスキップされます。
失敗試行:移動#2セクションをコメントアウトすると、移動#1が機能します。 Move#1セクションをコメントアウトすると、Move#2が機能します。考え
アイデア:私は.exit()
し、さらにデータバインド段階で.delay
、setTimeout()
、およびその他のオプションをGoogleで検索しているが、私は存在するシンプルな何かがあるはずと信じています。私もthis SO postに従ってみましたが、最初の回答の「一般的な更新パターン」の例には苦労しています。
質問: Move#1とMove#2を連続して動作させるにはどうすればよいですか?(さらにMoves#3、#4などが可能です)
これは私が探していたまさにあり、かつ所望の解に到達するために私の問題にアイデアを実装することができました。あなたの時間と努力をありがとう!これが将来の他の人に役立つことを願っています。 – ximiki