Hay lots of examples mostrando cómo añadir etiquetas a representar y visualizaciones de los árboles, pero probablemente me empezar con éste como el más simple:
No ha publicado un enlace a su código, pero supongo que node
se refiere a una selección de elementos del círculo SVG. No puede agregar elementos de texto a los elementos del círculo porque los elementos del círculo no son containers; agregar un elemento de texto a un círculo será ignorado.
Normalmente, utiliza un elemento G para agrupar un elemento circular (o un elemento de imagen, como se indica anteriormente) y un elemento de texto para cada nodo. La estructura resultante tiene este aspecto:
<g class="node" transform="translate(130,492)">
<circle r="4.5"/>
<text dx="12" dy=".35em">Gavroche</text>
</g>
Utilice un data-join para crear los elementos de G para cada nodo, y luego usar selection.append añadir un círculo y un elemento de texto para cada uno. Algo como esto:
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 });
Una desventaja de este enfoque es que es posible que desee que las etiquetas se dibujan encima de los círculos. Como SVG aún no es compatible con el índice z, los elementos se dibujan en orden de documento; por lo tanto, el enfoque anterior hace que se dibuje una etiqueta sobre su círculo, pero puede dibujarse bajo otros círculos. Puede solucionar este problema mediante el uso de dos datos se une y la creación de grupos separados para los círculos y etiquetas, así:
<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>
Y el JavaScript correspondiente:
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 });
Esta técnica se utiliza en el ejemplo Mobile Patent Suits (con un elemento de texto adicional usado para crear una sombra blanca).
Si bien este enlace puede responder a la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcionar el enlace de referencia. Las respuestas de solo enlace pueden dejar de ser válidas si la página vinculada cambia. – Whymarrh
@Whymarrh respuesta actualizada –