非常に多数のノードが存在する可能性のある強制レイアウトがあり、グラフが応答してレンダリングするには大きすぎます。システムのパフォーマンスを向上させる1つの方法は、ノードの数が多くなりすぎたときに、インディグリーとアウトディグリーに基づいてノードを削除することによってグラフを整理することだと考えていました。
リンクはノード配列のインデックスに関連しているため、ノードリストとリンクリストの再計算は少し面倒です。そのため、すべてのリンクを再構築する必要があります。
個々のノードを除外対象としてマークし(一部のノードと同様にfixed
)、レイアウトアルゴリズムでそれらのノードをスキップできるようにする方が、よりエレガントなようです。これにより、グラフのサブセットを動的に選択して表示することができ、各ノードの状態(位置など)を可能な限り維持できます。
誰かがこのようなものを実装しましたか?
更新:
フィルタの提案を実装しようとしましたが、興味深いエラーが発生しました。このfilter
メソッドは、以下を実装していないオブジェクトを返すようenter
です。
qChart apply limit:2
NODES BEF: [Array[218], enter: function, exit: function, select: function, selectAll: function, attr: function…]
NODES AFT: [Array[210], select: function, selectAll: function, attr: function, classed: function, style: function…]
Uncaught TypeError: Object [object Array] has no method 'enter'
次のコードは、から取得するために実行されBEF
ますAFT
。
nodeSubset = nodeSubset.filter(function(n) { return (n.sentCount() <= limit); });
更新2:
問題を切り分けるためにjsfiddleを作成しました。この例は、ChrisJamesCの答えの私の解釈を実装しています。私が彼の提案を直接実装しようとしたとき(のfilter
後にを置く)、によって返されたオブジェクトが定義されていなかったためdata
、後続の呼び出しは失敗しました。enter
filter
enter
目標は、を持っているノードのみをレイアウトで選択することですactive == true
。したがって、この例では、これはノードb
を除外する必要があることを意味します。