Es gibt lots of examples zeigen, wie Etiketten hinzufügen grafisch darzustellen und Baum-Visualisierungen, aber ich würde wahrscheinlich mit dieser als einfachstes starten:
Sie haben nicht gepostet ein Link zu Ihrem Code, aber ich denke, dass node
bezieht sich auf eine Auswahl von SVG-Kreis-Elementen. Sie können keine Textelemente zu Kreiselementen hinzufügen, da Kreiselemente nicht containers sind; Das Hinzufügen eines Textelements zu einem Kreis wird ignoriert.
Normalerweise verwenden Sie ein G-Element, um ein Kreiselement (oder ein Bildelement wie oben) und ein Textelement für jeden Knoten zu gruppieren. Die resultierende Struktur sieht wie folgt aus:
<g class="node" transform="translate(130,492)">
<circle r="4.5"/>
<text dx="12" dy=".35em">Gavroche</text>
</g>
ein data-join Verwenden Sie die G-Elemente für jeden Knoten zu erstellen, und dann selection.append verwenden für jeden einen Kreis und ein Textelement hinzuzufügen. Etwas wie folgt aus:
var node = svg.selectAll(".node")
.data(nodes)
.enter().append("g")
.attr("class", "node")
.call(force.drag);
node.append("circle")
.attr("r", 4.5);
node.append("text")
.attr("dx", 12)
.attr("dy", ".35em")
.text(function(d) { return d.name });
Ein Nachteil dieses Ansatzes ist, dass Sie die Etiketten auf der Kreise gezogen werden möchten. Da SVG den Z-Index noch nicht unterstützt, werden Elemente in der Reihenfolge der Dokumente gezeichnet. so verursacht der obige Ansatz, dass ein Etikett über seinen Kreis gezogen wird, aber es kann unter anderen Kreisen gezogen werden. Sie können dieses Problem beheben, indem zwei Daten-Verknüpfungen und getrennte Gruppen für Kreise und Erstellen von Etiketten, etwa so:
<g class="nodes">
<circle transform="translate(130,492)" r="4.5"/>
<circle transform="translate(110,249)" r="4.5"/>
…
</g>
<g class="labels">
<text transform="translate(130,492)" dx="12" dy=".35em">Gavroche</text>
<text transform="translate(110,249)" dx="12" dy=".35em">Valjean</text>
…
</g>
und die entsprechenden JavaScript:
var circle = svg.append("g")
.attr("class", "nodes")
.selectAll("circle")
.data(nodes)
.enter().append("circle")
.attr("r", 4.5)
.call(force.drag);
var text = svg.append("g")
.attr("class", "labels")
.selectAll("text")
.data(nodes)
.enter().append("text")
.attr("dx", 12)
.attr("dy", ".35em")
.text(function(d) { return d.name });
Diese Technik im Mobile Patent Suits Beispiel verwendet wird (mit einem zusätzlichen Textelement zum Erstellen eines weißen Schattens).
Während dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert. – Whymarrh
@Whymarrh Antwort aktualisiert –