ci sono lots of examples che mostra come aggiungere le etichette da rappresentare graficamente e visualizzazioni degli alberi, ma probabilmente sarei Iniziamo con questo come il più semplice:
Non hai inviato un link al tuo codice, ma suppongo che lo node
si riferisca ad una selezione di elementi del cerchio SVG. Non è possibile aggiungere elementi di testo agli elementi del cerchio perché gli elementi del cerchio non sono containers; l'aggiunta di un elemento testuale a un cerchio verrà ignorata.
Tipicamente si utilizza un elemento di G per raggruppare un elemento di cerchio (o un elemento di immagine, come sopra) e un elemento di testo per ciascun nodo. La struttura risultante è simile al seguente:
<g class="node" transform="translate(130,492)">
<circle r="4.5"/>
<text dx="12" dy=".35em">Gavroche</text>
</g>
Utilizzare un data-join per creare gli elementi G per ogni nodo, e quindi utilizzare selection.append per aggiungere un cerchio e un elemento di testo per ciascuno. Qualcosa di simile a questo:
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 });
Un difetto di questo approccio è che si può decidere le etichette da trarre in cima dei cerchi. Dato che SVG non supporta ancora z-index, gli elementi vengono disegnati nell'ordine del documento; così, l'approccio di cui sopra provoca un'etichetta da trarre sopra del suo cerchio, ma può essere disegnato sotto altri cerchi. È possibile risolvere questo problema utilizzando due dati-join e la creazione di gruppi separati per i cerchi e le etichette, in questo modo:
<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>
e il corrispondente 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 });
Questa tecnica viene utilizzata nell'esempio Mobile Patent Suits (con un elemento di testo aggiuntivo utilizzato per creare un'ombra bianca).
Sebbene questo collegamento possa rispondere alla domanda, è meglio includere qui le parti essenziali della risposta e fornire il collegamento per riferimento. Le risposte di solo collegamento possono diventare non valide se la pagina collegata cambia. – Whymarrh
@Whymarrh risposta aggiornata –