私はバブル グラフに取り組んでおり、各円にクリック イベントを追加しました。円をクリックすると、バブル グラフがより詳細な情報を表す新しいグラフに置き換えられます。
コードの一部を次に示します。
svg.selectAll("circle")
.data(dataset)
.enter()
.append("circle")
.attr("cx", function(d) {
return scaleX(d[2]);
})
.attr("cy", function(d) {
return scaleY(100 - d[1]);
})
.attr("r", function(d) {
return d[1];
})
.attr("fill", "#4eb157")
.attr("stroke", "#00c4d4")
.attr("stroke-width", function(d) {
return d[1]*(1-d[2]/100)*1.5;
})
.on("click", function ()
{
svg.selectAll("circle")
.data(new_dataset)
.enter()
.append("circle")
.attr("cx", function(d) {
return scaleX(d[2]);
})
.attr("cy", function(d) {
return scaleY(100 - d[1]);
})
.attr("r", function(d) {
return d[1];
})
.attr("fill", "#4eb157")
.attr("stroke", "#00c4d4")
.attr("stroke-width", function(d) {
return d[1]*(1-d[2]/100)*1.5;
});
svg.selectAll("text")
.data(new_dataset)
.enter()
.append("text")
.text(function(d) {
return d[0];
})
.attr("x", function(d) {
return scaleX(d[2]);
})
.attr("y", function(d) {
return scaleY(100 - d[1]);
})
.attr("font-family", "sans-serif")
.attr("font-size", "11px")
.attr("fill", "red");
});
円をクリックすると問題が発生し、グラフ全体が消えますが、新しいグラフは視覚化されません。オン クリック機能の実行中に、svg オブジェクトが初期状態から変更され、特に baseURI、clientHeight、clientWidth などのプロパティの一部が、最初に svg を作成したときでも設定されていないことがわかりました。物体。svg オブジェクトを作成するコードは次のとおりです。
var svg = d3.select("body").append("svg")
.attr("width", w)
.attr("height", h);
私の質問は、なぜ新しいグラフが表示されないのですか? これは、svg オブジェクトのプロパティが変更されたためですか? 新しいグラフを正常に視覚化するには、クリック機能で何を変更する必要がありますか?
ありがとう!