Pergunta

No sunburst, como eu posso tornar o código seleccione uma raiz de arco, apenas depois de todos os arcos foi gerado?

Por exemplo, no código a seguir:

var first_arc = ""
.json("../data/flare.json", function(json) {
   var path = vis.data([json]).selectAll("path")
       .data(partition.nodes)
     .enter().append("path")
       .attr("display", function(d) { return d.depth ? null : "none"; })
       .attr("d", arc)
       .attr("t_name", function(d) {return d.name})
       .style("fill-rule", "evenodd")
       .on("click", function(d)...

seria passado como "d" para a "função" clique em no meio do arco.

(seus dados vai primeiro no arquivo json)

Atualização 1:Alterar o código assim...

.style("fill-rule", function(d) {
   if (first_arc == "") first_arc = d; return "evenodd"})

...resolvido o problema, ele retorna object:

name: "flare"
children: Array[10]
...

mas esta solução não está certo e não é geral.

Atualização 2:Eu tentei várias seleciona, por exemplo:

first_arc = d3.select("[name='flare']")

ele geralmente retorna array:

0: null
length: 1
parentNode: HTMLHtmlElement
__proto__: Array[0]

ou "indefinido"

Atualização 3:

first_arc = d3.select("[t_name='flare']")

retorna array de tamanho 1 com crianças:

0: SVGPathElement
   __data__: Object

, onde __data__ é o objeto que eu estou procurando, mas eu não posso gerenciar para selecioná-lo.

Foi útil?

Solução

O nó raiz é o único com uma "profundidade" atributo definido para 0.Portanto, você pode dizer:

d3.selectAll("path").filter(function(d) { return d.depth === 0; })

Suas tentativas acima não estavam funcionando porque D3 usa CSS3 para selecionar elementos.Portanto, você só pode usar d3.selecione e d3.selectAll com CSS3 seletores i.e.você não pode acessar os dados associados a cada elemento desta forma.O caminho para filtrar os dados acoplados é usar seleção.filtro.

D3 seleções são, literalmente, uma matriz de elementos, consulte a "Operacional nas Seleções" seção.

Por último, você pode obter o dependente __data__ propriedade de um elemento usando seleção.datum().

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top