2013-05-17 4 views
9

ノードをクリックすると、ノードが大きくなり、現在は大きくなっているので、他のノードを撃退するようにチャージしたいと思います。ノードの充電を変更するにはどうすればよいですか?D3単一ノードの料金を変更する

コードの抜粋:the documentationから

[...] 

//draw new graph 
d3.json(file, function(error, graph) { 

force 
.nodes(graph.nodes) 
.links(graph.links) 
.start(); 

var nodeCircle = node.append("circle") 
.attr("id", function(d) { return "node"+d.id }) 
.attr("class", function(d) {return "node "+d.nodeclass; }) 
.attr("r", 8) // R = Radius of node 
.style("fill", function(d) { return d.color; }) // Will overwrite CSS style 
.on("click",function(d) { 

    //When CTRL key is pressed .... 
    if (d3.event.ctrlKey) { 
     if(d3.select(this).attr('r')==8){ 
      d3.select(this).attr('r', 12); 
      //ToDo: node Charge = -1000 
     }else{ 
      d3.select(this).attr('r', 8); 
      //ToDo: node Charge = -500 
     } 
    } 

}).call(force.drag); 
[...] 

答えて

7
function click(d1,i){ 
    force.charge(
      function(d2,i){ 
       if(d2!=d1) 
        return ...;//calculate your charge for other nodes 
       else 
        return ...;//calculate your charge for the clicked node 
      }); 

     force.start(); 
} 

これは私にとってうまくいきます!私が間違っているならば私を訂正してください!

+0

ほとんどの正確なシナリオがありました - 良い例を提供し、「再充電」と再起動が必要な「力」を明確にすることに感謝します。私は、最初に「チャージ」する機能を提供すると、各ティックで再評価される「生きた」チャージが生じると考えていました。 – brichins

+0

@brichinsあなたは歓迎です:) – Boopathy

5

force.charge([電荷])

電荷が指定されている場合、指定された値に電荷強度を設定します。 chargeが指定されていない場合は、現在のcharge strengthを返します。デフォルトは-30です。電荷が一定の場合、すべてのノードは同じ電荷を持つ。さもなければ、chargeが関数ならば、関数は各ノード(順番に)に対して評価され、このコンテキストをフォースレイアウトとしてノードとそのインデックスに渡されます。関数の戻り値を使用して各ノードの料金を設定します。この関数は、レイアウトが開始されるたびに評価されます。

だから、問題のノードに別の料金を与えるcharge()の関数を指定してレイアウトを再開してください。

+2

私はそれを読んだことがありますが、ドキュメンテーションはコード例を提供していないため、これまでのコンテキストでそれを実装しようとする私の試みはすべて失敗しました。 force.charge()はノードからforce()関数にアクセスする方法については明示的ではありません...少なくとも私にとっては。私は解決策が単純であることを知っています、私はそれを見つけることができません:p – FMaz008

+1

変数に力のレイアウトを保存する必要があります。 'var force = d3.layout.force(); ... force.charge(function(d){...}); force.start(); ' –

+0

しかし、1つの単一ノードをどのように対象にしますか?私は力全体を変えたくはなく、ノードだけを変えたいと思っています。そして、変化はデータからまったく来ていません...ああ、待って...クリックがデータのプロパティを変更しなければならない、そして、私は一般的な充電機能を再実行します... ??? – FMaz008

関連する問題