javascript - Agregar etiqueta de texto al nodo d3 en el diseño Force
d3.js label (1)
Este es mi código, también puede tener código completo en JsFiddle . Quiero tener etiquetas en cada nodo, pero no puedo. Por cierto, las etiquetas se pueden incrustar en el círculo de la console .
var nodes = svg.selectAll("circle")
.data(dataset.nodes)
.enter()
.append("circle")
.attr("r", 10)
.style("fill", function(d, i){
return colors(i);
})
.call(force.drag);
var label = nodes.append("svg:text")
.text(function (d) { return d.name; })
.style("text-anchor", "middle")
.style("fill", "#555")
.style("font-family", "Arial")
.style("font-size", 12);
force.on("tick", function(){
edges.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; });
nodes.attr("cx", function(d){ return d.x; })
.attr("cy", function(d){ return d.y; });
label.attr("x", function(d){ return d.x; })
.attr("y", function (d) {return d.y - 10; });
});
En este momento, está agregando los elementos de
text
elementos del
circle
, y eso simplemente no funcionará.
Cuando escribes...
var label = nodes.append("svg:text")
Estás agregando los textos a la selección de
nodes
.
Sin embargo, debe tener en cuenta qué
nodes
son:
var nodes = svg.selectAll("circle")
.data(dataset.nodes)
.enter()
.append("circle")
Por lo tanto, está agregando los textos a los círculos, y eso no funciona.
Aparecen cuando inspecciona la página (como
<circle><text></text></circle>
), pero en realidad nada aparecerá en el SVG.
Solución : simplemente cambie a:
var label = svg.selectAll(null)
.data(dataset.nodes)
.enter()
.append("text")
.text(function (d) { return d.name; })
.style("text-anchor", "middle")
.style("fill", "#555")
.style("font-family", "Arial")
.style("font-size", 12);
Aquí está el violín: https://jsfiddle.net/gerardofurtado/7pvhxfzg/1/