2012-11-27 11 views
6

私はバブルグラフを作成しており、クリックイベントを各サークルに付けました。円をクリックすると、バブルグラフは、より詳細な情報を表す新しいグラフに置き換えられます。ここでクリックイベントでD3 SVGオブジェクトにアクセス

は、コードの一部です:

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オブジェクトが初期状態から変更されていることを認識しました。特に、svgを最初に作成していても、baseURI、clientHeight、clientWidthなどのプロパティのいくつかはもう設定されませんオブジェクト。ここでは、私は、SVGオブジェクトを作成しているコードです:

var svg = d3.select("body").append("svg") 
        .attr("width", w) 
        .attr("height", h); 

私の質問はなぜ新しいグラフが表示されません?これはsvgオブジェクトのプロパティが変更されたためですか?新しいグラフをビジュアル化するために、クリック機能で何を変更する必要がありますか?

ありがとうございます!

答えて

4

svg要素の下にあるすべての円を選択してnew_datasetと結合しているという問題が発生しました。問題はonclickです。別のサークル要素セットを選択し、このグループにnew_datasetを参加させることをお勧めします。その1つの方法は、svgの下に2つのグループを作成し、元のセットのグループとnew_datasetのサークルの2つのグループを作成することです。別の解決方法は、異なるグループを円のグループに割り当て、クラスを使用して各選択を絞り込むことです。

:あなたは接合機構について明確な説明を見つけることができます以下のリンクで

関連する問題