2017-06-05 8 views
0

IはD3に動的に構築された力のグラフを作成しました。リンクの1つをクリックすると、そのリンクとリンクされているすべてのリンク/ノードのみが表示されます。 (:私はこれを更新し、現在の完全なソリューションですEDIT)http://plnkr.co/edit/TiKKmvydqXNipe103juL?p=preview隠すは、すべてが、D3に選択接続されたノード(V4)力グラフ

このPlunkrは私が持っているものの簡易版です。

接続ノードの3つの別々のグループがあります。私の実際のデータセットには数百のノードがあり、個々の「グループ」を分離することができます。そのグループの一部がクリックされています(クリックしたノードには情報が追加されたポップアップが表示されません)。私は色することができた

/私のデータを前処理及びリンクは同じ接続されたグループであるかどうかを判断するためにかなり複雑で長いったらしいアルゴリズムを使用して接続されたリンクを非表示にします。

dragstart関数を変更してクリックしたノードまたはすべてのノード/リンクを変更することもできましたが、これは近づいているように感じますが、リンク関係は認識されません。

function dragstarted(d) { 
    if (!d3.event.active) simulation.alphaTarget(0.3).restart(); 
    // Changes all nodes/links 
    d3.select("circle").classed("others",true).style("display","none"); 
    // Trying different ways to hide only 'other' nodes 
    d3.selectAll("circle").classed("others",true).style("display","none"); 
    d3.selectAll("line").classed("others",true).style("display","none"); 

    d.fx = d.x; 
    d.fy = d.y; 
} 

(私はこの質問/答えhow to highlight(change color) of all connected(neighbours) nodes and links in a d3 force directed graphの承知していますが、私はそれは本当に助けないと思います)。

ご協力いただければ幸いです。

+0

...うまくいけば、より多くの経験を積んだ、誰かが私たちのためにそれを整理します、私のstrongsuitではありません。https://stackoverflow.com/questions/ 8739072 /ハイライト選択したノード-そのリンク-と-その-子供イン-D3-力指向-GRAP私は、この投稿をした直後ことがわかっ –

+0

感謝。私はそれをフィットさせることができるかもしれません。 – AEngineer

+0

私はその記事で強調表示し、それはちょっと作品メソッドの実装と私のPlunkerを更新しましたが、リンクが正しく取得していないようです。私は本当にそれを理解していない - 私は2つのグループを同一にし、リンクのMNをクリックしてデータを更新したが、リンクHIをクリックしていない。他のノードとの関係で同じ場所にいるので混乱します。 – AEngineer

答えて

1

OK、これは私を超えかもしれませんが、私はあなたが何らかの形であなたのノードとグループの同じ種類にグループにあなたのリンクが必要だと思います。あなたが何らかの形でリンクにソースノードの「グループ」属性を追加することができた場合は、リンクをクリックしたとき、このような何かがうまくいくかもしれない:

代わり
d3.selectAll("line")function fade(){if 
(group = "selected", "opacity" = 1) 
else 
("opacity" = 0) 
}; 

、あなたが前のグループにリンクを並べ替えることができる場合データが(PHPなどのスクリプトで)読み込まれると、3つ(またはn)の行グループが別々のクラスに追加されます。

申し訳ありませんが、JSは、これは私が同様の機能を使用答えである

+0

これはまさに私が最後にしたことです。私のデータは外部ソースからのもので、D3を使用して必要なJSONオブジェクトに事前処理されています。私は、行、円、およびテキストノードにグループ属性を追加しています。私が本質的にやっていることは、リンクのソース/ dest文字列を取得し、それらを繰り返して既存のグループに追加するか、リンクのどちらかの端が既存のグループに存在しない場合に新しいグループを作成することです。結果のJSONには、各リンクとノードのグループ番号があります。ここに更新されたプランナーhttp://plnkr.co/edit/TiKKmvydqXNipe103juL?p=preview – AEngineer

+0

いいね、それは周りの最も簡単な方法だと思う。 –