d3を使用してフォースレイアウトを作成しました。これはうまくいきます。私の最初のデータがJSONファイルからロードされ、チャートはthis d3.js exampleに似ている技術を用いて描かれている:今のチャートは、私が上のノードを追加、更新、および削除する必要が画面上にあることをd3フォースレイアウトの既存ノードを更新
私はウェブソケットを介して受け取るデータから飛ぶ。メソッドを追加したり削除したりしていますが、既存のノードのプロパティを更新する正しい方法を見つけることができません。
私はデータのソースを変更し、次にenter()メソッドを使用してグラフを更新するという正しい方法を取り入れたことを読んでいます。
function updateNode(id, word, size, trend, parent_id){
var updateNode = nodes.filter(function(d, i) { return d.id == id ? this : null; });
if(updateNode[0]){
updateNode.size = Number(size);
updateNode.trend = trend;
nodes[updateNode.index] = updateNode;
update();
}
}
更新機能は、その後でノードを更新します:私はこれに適切なアプローチを取ってい
function update(){
node = vis.selectAll('.node')
.data(nodes, function(d) {
return d.id;
})
createNewNodes(node.enter());
node.exit().remove();
force.start();
}
function createNewNodes(selection){
var slct = selection.append('g')
.attr('class', 'node')
.call(force.drag);
slct.append('circle')
.transition()
.duration(500)
.attr('r', function(d) {
if(d.size){
return Math.sqrt(sizeScale(d.size)*40);
}
})
}
私は次のことをやっているノードを更新するには
?このコードを試してみると、サークル上のradius属性を設定しようとするとノードとして取得するノードがノード配列の最後のノードになります。私。 1つのノードオブジェクトではなく、階層的なノードデータを含むノードです。
任意のポインタを大幅に私はこの上であまりにも多くの時間を費やしてきた、高く評価されるだろう:)
はるかに単純な状況であるが、私は、同じ問題を抱えています。あなたは解決策を見つけましたか? –
は、コードをオンラインエディタ(例:http://phrogz.net/JS/d3-playground/#BlankDefault)に入れることができます – ppoliani