igraphを使用して安定した力の有向グラフの位置を事前に計算し、それらをd3.jsグラフに渡そうとしています。これは私が使用するデータセットのサイズによるものです。つまり、クライアント側で完全な力の計算が行われても、フリーズしないようにクライアントに依存することはできません。私はJSON形式でポジションを持ち、d3.jsで便利なようにリニアスケールを使用しました。D3.jsのノードの事前計算を計算して設定します
var positions =
{"positions": [{"x":"-68.824367374", "y": "-6.10824525755"},
{"x":"-80.8080803911", "y": "-3.38997541264"},
{"x":"6.75334817585", "y": "-49.6040729697"},
{"x":"14.6608797291", "y": "-81.8897019921"},
....
var force = d3.layout.force()
.charge(-100)
.linkDistance(3)
.size([width, height])
.nodes(data.nodes)
.links(data.links)
.start();
var posX = d3.scale.linear()
.range([0,960])
.domain([-125,120]);
var posY = d3.scale.linear()
.range([0,500])
.domain([-125,125]);
これが私のやり方です。私はpxとpyで実験しましたが、結果は同じです。これは、このコードが実行されなかったかのようです。下の図のconsole.log
を投げた場合、値は印刷されません。これは、私がこのコードをどこに置くかに関わらず、力を始める前か後かにかかわらずです。
force.on("start", function() {
node
.data(positions.positions)
.attr("cx", function(d) {
console.log(posX(d.x));
return posX(d.x);
})
.attr("cy", function(d) {
return posY(d.y);
})
});
なぜ起動イベントが自分のノードの初期位置を設定しないのですか?彼らはまだランダムに初期化されているようです。あるいは、d3.js force directedグラフの安定した状態を事前に計算する良い方法は何ですか?私はPhantomjsでやってみたが、あきらめた。
私の質問を読んでいただきありがとうございます!
EDITここ
はダウン易しく書き直さ例です。https://jsfiddle.net/xp0zgqes/ あなたはそれを数回実行し、ノードの開始位置に注意を払う場合は、彼らがランダムに初期化されて見ることができます。
あなたは自分の持っているものを使って作業フィドルを提供できますか? – iulian
修正された質問をご覧ください。 –
本当に、誰もいませんか?私は好奇心が強いです... –