Ich bin neu in D3 und versuche eine interaktive Netzwerkvisualisierung zu erstellen. Ich habe große Teile von this Beispiel kopiert, aber ich habe die gekrümmten Linien zu geraden geändert, indem ich SVG- "Linien" anstelle von "Pfaden" verwendet habe, und ich habe auch die Knoten entsprechend den Daten skaliert, die sie darstellen. Das Problem ist, dass meine Pfeilspitzen (erstellt mit SVG-Markierungen) an den Enden der Linien sind. Da einige der Knoten groß sind, werden die Pfeile hinter ihnen versteckt. Ich möchte, dass meine Pfeilspitzen genau an der äußeren Kante des Knotens angezeigt werden, auf den sie zeigen.Hole Pfeilspitzen, um auf die äußere Kante des Knotens in D3 zu zeigen.
Hier ist, wie ich die Markierungen und Links bin erstellen:
svg.append("svg:defs").selectAll("marker")
.data(["prereq", "coreq"])
.enter().append("svg:marker")
.attr("id", String)
.attr("viewBox", "0 -5 10 10")
.attr("refX", 15)
.attr("markerWidth", 6)
.attr("markerHeight", 6)
.attr("orient", "auto")
.append("svg:path")
.attr("d", "M0,-5L10,0L0,5");
var link = svg.selectAll(".link")
.data(force.links())
.enter().append("line")
.attr("class", "link")
.attr("marker-end", function(d) { return "url(#" + d.type + ")"; });
Ich bemerkte, dass das „REFX“ Attribut gibt an, wie weit vom Ende der Linie sollte die Pfeilspitze angezeigt. Wie kann ich dies vom Radius des Knotens abhängig machen, auf den es zeigt? Wenn ich das nicht kann, könnte ich stattdessen die Endpunkte der Linien selbst ändern? Ich vermute, ich würde in dieser Funktion das tun, was die Endpunkte der Linien wie alles bewegt sich setzt:
function tick() {
link
.attr("x1", function(d) { return d.source.x; })
.attr("y1", function(d) { return d.source.y; })
.attr("x2", function(d) { return d.target.x; })
.attr("y2", function(d) { return d.target.y; });
circle.attr("transform", function(d) {
return "translate(" + d.x + "," + d.y + ")";
});
text.attr("transform", function(d) {
return "translate(" + d.x + "," + d.y + ")";
});
}
Welche Ansatz macht mehr Sinn, und wie würde ich es umsetzen?
[Diese Frage] (http://stackoverflow.com/questions/16568313/arrows-on-links-in-d3js-force-layout/16568625) sollte helfen. –