すべてのAPIの例はまだv3のようです。次のような固定距離のリンクを使用して力グラフを作成する方法を理解しようとしています http://bl.ocks.org/d3noob/5141278
Link_distanceを確認しましたが、どのように適用するかわかりません: https://github.com/d3/d3-force/blob/master/README.md#link_distance
次のようなグラフを作成します。
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));
私は次のようなさまざまなコンボを試しました:
// .force("link", d3.forceLink().distance(20).strength(1))
// .force("linkDistance", 20)
// .force("link", d3.forceLink().id(function(d) { return d.id; }))
運が悪い!
Link_distanceを修正できないようですか?その強さと(距離、それが何であれ)の結果
それでは、d3 v4のリンクにstrength
およびdistance
をどのように適用しますか?シミュレーションなどに適用されていますか?
あなたはv4で距離を変えるのに近づいています!この変更を確認してください...それは私にとってはうまくいきます:
var simulation = d3.forceSimulation()
.force("link", d3.forceLink().id(function(d, i) { return i; }).distance(100).strength(1))
.force("charge", d3.forceManyBody())
.force("center", d3.forceCenter(width / 2, height / 2));
元のコードはほぼ正しいものでした。ただし、i
を関数に追加する必要があり、リンク距離を変更するためにi
も返す必要があります。これを反映するために元のコードを編集しました。このリンクを参照してください: 無料コードキャンプへのリンク
あなたはもうすぐそこにいます...これをチェックしてください。このコードは私にとってはうまくいきます。
注:このコードでノードラベルに基づいてリンクの長さを動的に取得しています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);