2016-08-31 19 views
11

すべてのAPIの例はまだv3のようです。以下のようなグラフを作成 https://github.com/d3/d3-force/blob/master/README.md#link_distanced3 v4との固定リンク距離の設定方法

:私はそれを適用する方法がわからlink_distance見なく http://bl.ocks.org/d3noob/5141278

: は、私のような一定の距離のリンク、と力のグラフを作成する方法を理解しようとしていますこの:

// .force("link", d3.forceLink().distance(20).strength(1)) 
    // .force("linkDistance", 20) 
    // .force("link", d3.forceLink().id(function(d) { return d.id; })) 

let simulation = d3.forceSimulation() 
     .force("link", d3.forceLink().id(function(d) { return d.id; })) 
     .force("charge", d3.forceManyBody().strength(-150)) 
     .force("center", d3.forceCenter(width/2, height/2)); 

私のような様々なコンボを試してみました

しかし、運がない!

だから、link_distanceを修正できないようですか? その強さと距離の結果

したがって、strengthdistanceをd3 v4のリンクに適用するにはどうすればよいですか? シミュレーションなどに適用されていますか?

+0

D3 v3でもv4でも固定リンク距離のようなものはありません。私の[回答](http://stackoverflow.com/a/34376334/4235784)[* "d3.jsリンクの強さグラフのリンク距離に対する影響" *](/ q/34355120)を見てくださいv3の場合多くの変更がありましたが、特にフォースレイアウトの場合、これと同じ原理がv4でも当てはまります。リンクの長さが同じであるように見える場合、これは偶然であり、主に周囲の他のパラメータや力によって影響されます。 – altocumulus

+0

よろしくお願いいたします。しかし、私はまだv4 APIでlinkDistanceまたはlinkStrengthコマンドを設定する方法が不明です。 'd3.forceSimulation'やその他のものに設定していますか? – dcsan

+0

はい、それはv4とv3を探していくのに少し難しかったです。私は2つのことをお勧めします:1)V4のみhttp://blockbuilder.org/search#d3version=v4で検索しています(これは遅くまで見つけられませんでした)。 2)私の自明でないd3力グラフ:http://bl.ocks.org/bill-mybiz/dfe5b70ad9b469e23b8820790fa53109。私はv3のドキュメンテーションについていくのはちょっとイライラしているので、これは些細なリファレンス実装のために作ったものです。これには、ノードグループ(単純な円だけでなく)、es6クラス構造などを使用するノードの動的追加/削除があります。これには、距離の設定だけでなく、他の設定も含まれます。 – ibgib

答えて

17

あなたはv4の距離を変更することにほぼ近いです!この変更をチェックし、それが私の作品:

var simulation = d3.forceSimulation() 
    .force("link", d3.forceLink().id(function(d) { return d.id; }).distance(100).strength(1)) 
    .force("charge", d3.forceManyBody()) 
    .force("center", d3.forceCenter(width/2, height/2)); 
-1

はあなたがほとんどあります...これをチェックforce('center')

let simulation = d3.forceSimulation() 
    .force("link", d3.forceLink().id(function(d) { return d.id; })) 
    .force("charge", d3.forceManyBody().strength(-150)); 
1

せずに試すことがあり、このコードは私の作品..

注:このコードでノードラベルに基づいてリンクの長さを動的に取得していますGetNodeDefaults(d.label).linkDistanceつまり、100または200または300などになる可能性があります。

var forceLink = d3 
    .forceLink().id(function (d) { 
     return d.id; 
    }) 
    .distance(function (d) { 
     return GetNodeDefaults(d.label).linkDistance; 
    }) 
    .strength(0.1); 

var simulation = d3.forceSimulation() 
    .force("link", forceLink) 
    .force("charge", d3.forceManyBody().strength(function (d, i) { 
     var a = i == 0 ? -2000 : -1000; 
     return a; 
    }).distanceMin(200).distanceMax(1000)) 
    .force("center", d3.forceCenter(width/2, height/2)) 
    .force("y", d3.forceY(0.01)) 
    .force("x", d3.forceX(0.01)) 
    .on("tick", ticked); 
関連する問題