私は既にadd and remove nodes in D3jsにアクセスしていますが、私の問題は解決しません。d3.jsの既存のノードを削除する方法
最初にいくつかのノードがあり、次にノードを動的に追加したいと思います。ノードがすでに存在する場合は、そのノードを更新し、複製はしません。
現在、既存のものを更新しないで複製しています。ここ
は、メインコードと完全なコードや作業フィドルあるhere
//handles node elements
var circles = svg.selectAll('g');
//update graph (called when needed)
function restart() {
/***************************************
Draw circles (nodes)
****************************************/
circles = circles.data(data.nodes);
var g = circles.enter()
.append("g")
.attr("class", "gNode")
.attr("cursor", "pointer")
.attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")"; })
.call(force.drag);
g.append("circle")
.attr({
"class": "node",
"cx": function(d) { return rScale(d.NumOccurrences); },
"cy": function(d) { return rScale(d.NumOccurrences); },
"r": function(d) { return rScale(d.NumOccurrences); }
})
.style("fill", function(d, i) { return colors(i); })
.style("stroke", "#000");
g.append("text")
.attr({
"x": function(d) { return rScale(d.NumOccurrences); },
"y": function(d) { return rScale(d.NumOccurrences); },
"font-family": "sans-serif",
"font-size": "20px",
"fill": "black",
"text-anchor": "middle"
})
.text(function (d) { return d.name; });
g.append("title")
.text(function(d) { return d.name; });
// remove old nodes
circles.exit().remove();
// set the graph in motion
force.start();
}
// app starts here
restart();
function dynamicAddNodes() {
var updatedata = {"name":"ios","NumOccurrences":"500","color":"green","x":0,"y":1}
data.nodes.push(updatedata);
restart();
}
setInterval(dynamicAddNodes, 10000);
お返事ありがとうございます。私がしたいことをあなたに説明させてください。 **既存のノードの半径を更新して新しいノードを追加したい** ** 1 **これらはデータベースに格納されたキーワードです。 ** 2 **このキーワードがデータベースに存在する時間に基づいて半径20のノードとサイズを初めて表示します。 ** 3 **新しいキーワードがデータベースに追加されたか、重複したキーワードが追加されました。 ** 4 **今10秒後にデータベースを呼び出してキーワードを取得し、既存のノードの半径を更新して新しいノードを追加したい場合 –
http://bl.ocks.org/mbostock/3808218を見てください。 d3の一般的な更新パターンを示し、次の2つの例は、キー付きデータとトランジションの実行方法を示しています。 基本的には、データの入力、葉の変更、および変更のときの処理を指定することです。これらの動作を定義し、データを更新するたびにその関数を呼び出す関数が必要になります。 – ckersch