Tengo un nodo de fuerza estática visual que se ve así:
Y código relevante:
const node2 = g.append("g") .selectAll(".labels") .data(nodes) .join("text") .attr('x', d=> dx) .attr('y', d=> d.y+3) .attr('text-anchor','middle') .attr('class','labels') //.text(d=> d.data.name) .text(function(d,i) {return i-2}) .style("fill", d=> d.children ? "none": d.data.new==true?"#fff":"#000") .style('font-size',12);Los datos se ven como:
{"name":"Name1", tree: { "name":"center", "children": [ {"name":"category1","children":[{"name":"node1"},{"name":"node2"},{"name":"node3"}]}, {"name":"category2","children":[{"name":"node4"},{"name":"node5"}]}, ] } } Lo que me gustaría tener aquí es que las etiquetas muestren una especie de "id" de conteo para cada nodo a partir de 1. Inicialmente pensé que podría restar 2 como: i-2 . Sin embargo, para estructuras de fuerza más simples, esto resultó ser demasiado, dejando el conteo a partir de 0.
¿Cómo puedo hacer que mi lógica de conteo sea robusta para mostrar un conteo que incluya solo niños (independientemente de la estructura principal/general)?
Editar
También traté de aplicar una lógica de conteo de padres, pero esto me dio todos los NaN:
.text(function(d,i) { if (d.depth==0) { console.log(d) var parents = d.children.length; } return i-parents; //return i-2 }) Edición 2 Lo hice funcionar al cambiar los parents a global, pero parece un poco raro. Todavía agradecería una respuesta más sofisticada.