d3のパックレイアウト(http://bl.ocks.org/4063530)の周りに私の心を包み込みたいと思っています。d3.jsのlayout.packを更新する
私は基本的なレイアウトが動作していますが、私は新しいデータでそれを更新したいと思います。新しいデータを収集し、それを現在のレイアウトパックにバインドし、それに応じて更新する(更新/終了/入力)。
私の試みはここ(http://jsfiddle.net/emepyc/n4xk8/14/)です:私は、データをバインドするにはどうすればよい
var bPack = function(vis) {
var pack = d3.layout.pack()
.size([400,400])
.value(function(d) {return d.time});
var node = vis.data([data])
.selectAll("g.node")
.data(pack.nodes)
.enter()
.append("g")
.attr("class", function(d) { return d.children ? "node" : "leaf node"; })
.attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")"; });
node.append("circle")
.attr("r", function(d) { return d.r });
node.filter(function(d) { return !d.children; }).append("text")
.attr("text-anchor", "middle")
.attr("dy", ".3em")
.text(function(d) { return d.analysis_id });
bPack.update = function(new_data) {
console.log("UPDATE");
node
.data([new_data])
.selectAll("g.node")
.data(pack.nodes);
node
.transition()
.duration(1000)
.attr("class", function(d) { return d.children ? "node" : "leaf node" })
.attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")" });
node.selectAll("circle")
.data(new_data)
.transition()
.duration(1000)
.attr("r", function(d) { return d.r; });
};
具体的な質問...
? (データは複雑な構造ではなく、データの配列ではないため)
新しいノード/リーフをレイアウトに追加するにはどうすればよいですか?そして古いものは取り除かれましたか?
実例へのポインタは非常に高く評価されます。関連性の
質問をしてからしばらく時間がかかっていますが、おそらく私の解決策をチェックできますか?私はあなたのジレンマに正しい答えがあるのか不思議です。そして、おそらく他の人はあなたの質問がどのように解決されたのか興味があります。:) – VividD
はい、答えはパックレイアウトがあなたのためにすべての仕事をさせることです。この作業を開始したときはこれは明白ではありませんでしたが、別の例(ツリーレイアウトの更新)でこのソリューションが機能していました。実際の例をありがとう。 – emepyc
問題を解決できたことをうれしく思います。最終的な解決策はシンプルですが、最初に問題に取り組む際には明らかではありません。私はそのような場合が大好きです。 – VividD