Sto lavorando a un grafico di forza diretta in D3. Voglio evidenziare il nodo mouseover, i suoi collegamenti e i suoi nodi figli impostando tutti gli altri nodi e collegamenti su un'opacità inferiore.Evidenzia il nodo selezionato, i relativi collegamenti e i relativi elementi secondari in un grafico diretto forzato D3
In questo esempio, http://jsfiddle.net/xReHA/, sono in grado di sfumare tutti i collegamenti e i nodi e quindi dissolvenza nei collegamenti collegati, ma, finora, non sono stato in grado di svanire elegantemente nei nodi collegati che sono bambini del nodo attualmente mouseover.
Questa è la funzione chiave dal codice:
function fade(opacity) {
return function(d, i) {
//fade all elements
svg.selectAll("circle, line").style("opacity", opacity);
var associated_links = svg.selectAll("line").filter(function(d) {
return d.source.index == i || d.target.index == i;
}).each(function(dLink, iLink) {
//unfade links and nodes connected to the current node
d3.select(this).style("opacity", 1);
//THE FOLLOWING CAUSES: Uncaught TypeError: Cannot call method 'setProperty' of undefined
d3.select(dLink.source).style("opacity", 1);
d3.select(dLink.target).style("opacity", 1);
});
};
}
sto ottenendo un errore di Uncaught TypeError: Cannot call method 'setProperty' of undefined
quando cerco di impostare l'opacità su un elemento ho caricato dal source.target. Sospetto che questo non sia il modo giusto per caricare quel nodo come oggetto d3, ma non riesco a trovare un altro modo per caricarlo senza iterare nuovamente su tutti i nodi per trovare quelli che corrispondono alla destinazione o alla sorgente del link. Per mantenere le prestazioni ragionevoli, non voglio scorrere tutti i nodi più del necessario.
ho preso l'esempio di dissolvenza i link da http://mbostock.github.com/d3/ex/chord.html:
Tuttavia, che non mostra come modificare i nodi figlio collegati.
Eventuali buoni suggerimenti su come risolvere o migliorare questo sarà furiosamente upvoted :)
Che funziona alla grande @mbostock, grazie mille: D Ho aggiornato [il jsfiddle] (http://jsfiddle.net/xReHA/1/) con la tua soluzione. –
Rimossa una chiamata non necessaria allo stile sul collegamento: http://jsfiddle.net/xReHA/2/ –
Mike, quella soluzione era semplicemente bellissima. Basta dire. – Vivek