Estoy trabajando en un gráfico dirigido por fuerza en D3. Quiero resaltar el nodo mouseover'd, sus enlaces y sus nodos secundarios al establecer todos los otros nodos y enlaces a una opacidad menor.Resalte el nodo seleccionado, sus enlaces y sus elementos secundarios en un gráfico dirigido por fuerza D3
En este ejemplo, http://jsfiddle.net/xReHA/, soy capaz de desaparecer todos los enlaces y nodos luego se desvanecen en los enlaces conectados, pero, hasta ahora, no he sido capaz de desvanecimiento elegantemente en los nodos conectados que son los niños del nodo actualmente mouseover'd.
Ésta es la función clave del código:
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);
});
};
}
estoy recibiendo un error de Uncaught TypeError: Cannot call method 'setProperty' of undefined
cuando trato de establecer la opacidad en un elemento que he cargado desde el source.target. Sospecho que esta no es la forma correcta de cargar ese nodo como un objeto d3, pero no puedo encontrar otra manera de cargarlo sin iterar sobre todos los nodos nuevamente para encontrar los que coinciden con el destino o fuente del enlace. Para mantener el rendimiento razonable, no quiero iterar sobre todos los nodos más de lo necesario.
Me tomó el ejemplo de la decoloración de los enlaces http://mbostock.github.com/d3/ex/chord.html:
Sin embargo, que no muestra cómo alterar los nodos secundarios conectados.
Cualquier buenas sugerencias sobre cómo resolver o mejorar esto será furiosamente upvoted :)
Eso funciona genial @mbostock, muchas gracias: D He actualizado [el jsfiddle] (http://jsfiddle.net/xReHA/1/) con su solución. –
Se eliminó una llamada innecesaria al estilo en el enlace: http://jsfiddle.net/xReHA/2/ –
Mike, esa solución era simplemente hermosa. Sólo digo'. – Vivek