2014-04-23 9 views
5

Ich habe eine Kraft gerichtete Grafik für die soziale Netzwerkanalyse erstellen.Verhindern Knoten Überlappung in Kraft gerichtete Grafik

Das Problem, das ich bin vor, dass Knoten in einander überlappend hält,

Wie kann ich verhindern, dass der Knoten in Kraft gerichteten Graphen überlappende?

Hier ist meine code with dummy data

Und nach wird das Bild für meine Kraft gerichteten Graphen

enter image description here

enter image description here

Wie kann ich Überlappung dieser Knoten entfernen? und wie kann ich mindestens einen Abstand zwischen den Links halten, so dass Links richtig sichtbar sind?

+2

Kollisionserkennung? http://bl.ocks.org/mbstock/3231298 – Josh

+0

@Josh Ich habe 'var q = d3.geom.quadtree (graph.nodes), i = 0, gesetzt n = nodes.length; while (++ i analyticalpicasso

+1

Sie könnten die „Ladung“ Parameter auf Ihre Kraft Layout auch einfach erhöhen, und es vielleicht eine Funktion der Knotentyp machen (so dass die größeren Symbole einander abstoßen mehr als die kleineren tun). Angesichts der Anzahl der Links, die Sie haben, werden Sie wahrscheinlich immer noch überlappende Zeilen haben. – AmeliaBR

Antwort

8

Es gibt zwei Ansätze zur Vermeidung von Überlappungen in einem d3-Force-Layout.

Die erste besteht darin, die Parameter des force object anzupassen, von denen die relevanteste der Parameter "charge" ist. Knoten mit negativen "Lade" -Werten drücken andere Knoten weg (gegenüber Knoten mit positiven Werten ziehen andere Knoten näher heran), und Sie können die Ladungsmenge erhöhen, um einen größeren Schub zu verursachen.

Der Standardwert für die "Ladung" ist -30, von daher können Sie sie anpassen, bis Sie einen gewünschten Effekt erhalten. Es gibt keine einfache Formel zum Bestimmen des gewünschten Werts, da dies auch von den anderen Parametern und der Anzahl der Links in Ihrem Diagramm abhängt.

Wenn aus irgendeinem Grund die Anpassung der Ladung für Sie nicht funktioniert (wenn Sie beispielsweise die Knoten nahe aneinander gruppieren möchten - sich nicht gegenseitig abstoßen - sich aber dennoch nicht überschneiden), können Sie dies manuell tun Überprüfen Sie auf überlappende Knoten, wie in this Mike Bostock example vorgeschlagen von Josh in den Kommentaren.

+0

Eine andere (weniger offensichtliche), bei der Überlappungen vermieden werden, ist https://bl.ocks.org/mbostock/1062383 – Fuhrmanator