D3力グラフからノードを正しく削除できません

VincentDM

私は、プロジェクトをすばやく開始するために使用できる基本的なjavascriptD3グラフクラスに取り組んでいます。現在、リンクとノードの追加は正しく機能しますが、いくつかの基本的な概念では明らかに理解していないことがあります。

これが私が現在ノードを削除するために行っていることです。

this.nodesRef = this.svg.select(".nodes").selectAll(".node");
//...
removeNode (iNodeId) 
{
  let indexToRemove = this.nodesData.map(node => node.id).indexOf(iNodeId);
  this.nodesData.splice(indexToRemove,1);   

  this.nodesRef.data(this.nodesData,d => d.id).exit().remove(); 
};

nodesRef選択とnodesData配列の処理方法に明らかに問題があります。ときにremoveNode()発生し、それが見えます[OK]が、選択はまだ削除したノードが含まれている、と私は後で別のノードを追加している時に、追加ノードが表示されない、ノードが滞っている、といくつかの他の問題..

削除後に選択範囲とデータを適切に更新する方法を理解する必要がありますが、正直なところ、入力/終了/更新の用語に迷っています。

更新:

関数updateSimulation()から欠落しいるものを追加しましたremoveNode()、削除後、6番目のノード自体が応答しないが、5番目のノードによって制御されるという問題がまだあります。

removeNode (iNodeId) 
{    
  // Remove from data
  let indexToRemove = this.nodesData.map(node => node.id).indexOf(iNodeId);
  this.nodesData.splice(indexToRemove,1);   

  this.nodesRef.data(this.nodesData,d => d.id).exit().remove();  

  this.updateSimulation();  
};  

updateSimulation ()
{
  this.simulation.nodes(this.nodesData);
  this.simulation.force("link").links(this.linksData);
  this.simulation.alphaDecay(0.05).alpha(1).restart();
}  

私が奇妙だと思うのは、後exit().remove()、削除されたノードが選択に保持されることです。私はnodesRef次のようなことをして更新しようとしまし

this.nodesRef = this.nodesRef.data(this.nodesData,d => d.id)
  .enter()
  ./* defining nodes stuff*/ 
  .merge(this.nodesRef);

しかし、それは私に同じ結果をもたらします。私はまだ選択を管理する方法を正しく理解していないと思います。

編集:古代のCodePenリンクを削除

VincentDM

ついに動作しました!

このページは、選択を理解するのに本当に役立ちました。基本的に、append()が新しい選択を返し、前の選択を含む変数に何かを追加するだけではないことを最初から理解していませんでした。

このページは、グラフを更新する著者の方法を明らかにしました。このパターンを使用すると、多くのことが簡単になりました。一般的な考え方は、スプライス、ポップ、プッシュ、ノードへの処理、データ配列のリンクを行ってから、次のように選択を更新することです。

// Update the data, remove obsolete elements, add and merge new elements
nodesSelection = nodesSelection.data(nodesData, d => d.id);
nodesSelection.exit().remove();
nodesSelection = nodesSelection.enter()./* setup node shape*/.merge(nodesSelection);

// Repeat pattern for links
// ...

// Update simulation resources and "reheat" the graph
simulation.nodes(nodesData);
simulation.force("link",d3.forceLink(linksData).id( d => d.id));
simulation.alpha(1).restart();

リンクの更新で理解する必要のあることがまだいくつかあります。マイクの例では、実行するだけでシミュレーションリンクを更新しますが、simulation.force("link").links(links);これまでのところうまくいきません。おそらく、リンクオブジェクトのプロパティを持つものです。

しかし、これは今のところ十分です、遊ぶ時間:ここに現在のグラフクラス

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

d3.jsのjsonからグラフデータ(ノード、リンク)を抽出できません

分類Dev

d3力指向ネットワークグラフのラベルでノードとリンクを更新しても、ノードが適切に削除されません

分類Dev

Bottomnavigationviewでフラグメントを正しくロードできません

分類Dev

d3ノードからリンクを削除する-グラフはラベルをシャッフルします

分類Dev

D3の力指向グラフ(v4)はノードとしてimgを受け入れていません

分類Dev

CSVからJSONに再フォーマットされたデータ、D3で正しく解析できません

分類Dev

リストのノードを末尾から先頭まで正しく表示できません

分類Dev

d3を使用して折れ線グラフを表示できません

分類Dev

D3円グラフを中央揃えできません

分類Dev

D3バー/折れ線グラフに線を表示できません

分類Dev

d3 グラフ ノードを削除すると、行が残ります

分類Dev

Neoclipseはグラフビューを生成できません、参照ノードエラーを表示しますか?

分類Dev

D3の力指向グラフ内に画像をレンダリングできません

分類Dev

D3ノードの色を動的に変更します(力指向グラフ)

分類Dev

Googleスプレッドシートからデータを正しくフェッチできません

分類Dev

d3の力指向グラフでノードとして使用される場合、divのサイズを動的に変更します

分類Dev

スタイリングノードラベルがd3力指向グラフで機能しない

分類Dev

TestNGを使用するSeleniumWebdriver-ラベルから入力フィールドの正しいXpathを見つけることができません

分類Dev

d3の力指向グラフに新しいノードのみを追加するにはどうすればよいですか?

分類Dev

D3力レイアウトグラフのノードとして画像を追加するにはどうすればよいですか?

分類Dev

Azureフォームレコグナイザーエラー:「入力URLから画像をダウンロードできませんでした。」

分類Dev

D3.js-ノードクリック後にノードラベルを設定できませんか?

分類Dev

「ifelse」コードを正しく理解できませんか?

分類Dev

XMLノードからList <Item>にデータを入力できません

分類Dev

D3フォースグラフでD3ノードの選択はどのように機能しますか?

分類Dev

D3力指向グラフの「ピン留め」ノード

分類Dev

D3力指向グラフ:ノード位置の更新

分類Dev

Firestoreからフィールドを削除できません

分類Dev

ルートレベルからノードを削除できません

Related 関連記事

  1. 1

    d3.jsのjsonからグラフデータ(ノード、リンク)を抽出できません

  2. 2

    d3力指向ネットワークグラフのラベルでノードとリンクを更新しても、ノードが適切に削除されません

  3. 3

    Bottomnavigationviewでフラグメントを正しくロードできません

  4. 4

    d3ノードからリンクを削除する-グラフはラベルをシャッフルします

  5. 5

    D3の力指向グラフ(v4)はノードとしてimgを受け入れていません

  6. 6

    CSVからJSONに再フォーマットされたデータ、D3で正しく解析できません

  7. 7

    リストのノードを末尾から先頭まで正しく表示できません

  8. 8

    d3を使用して折れ線グラフを表示できません

  9. 9

    D3円グラフを中央揃えできません

  10. 10

    D3バー/折れ線グラフに線を表示できません

  11. 11

    d3 グラフ ノードを削除すると、行が残ります

  12. 12

    Neoclipseはグラフビューを生成できません、参照ノードエラーを表示しますか?

  13. 13

    D3の力指向グラフ内に画像をレンダリングできません

  14. 14

    D3ノードの色を動的に変更します(力指向グラフ)

  15. 15

    Googleスプレッドシートからデータを正しくフェッチできません

  16. 16

    d3の力指向グラフでノードとして使用される場合、divのサイズを動的に変更します

  17. 17

    スタイリングノードラベルがd3力指向グラフで機能しない

  18. 18

    TestNGを使用するSeleniumWebdriver-ラベルから入力フィールドの正しいXpathを見つけることができません

  19. 19

    d3の力指向グラフに新しいノードのみを追加するにはどうすればよいですか?

  20. 20

    D3力レイアウトグラフのノードとして画像を追加するにはどうすればよいですか?

  21. 21

    Azureフォームレコグナイザーエラー:「入力URLから画像をダウンロードできませんでした。」

  22. 22

    D3.js-ノードクリック後にノードラベルを設定できませんか?

  23. 23

    「ifelse」コードを正しく理解できませんか?

  24. 24

    XMLノードからList <Item>にデータを入力できません

  25. 25

    D3フォースグラフでD3ノードの選択はどのように機能しますか?

  26. 26

    D3力指向グラフの「ピン留め」ノード

  27. 27

    D3力指向グラフ:ノード位置の更新

  28. 28

    Firestoreからフィールドを削除できません

  29. 29

    ルートレベルからノードを削除できません

ホットタグ

アーカイブ