Выделите выбранный узел, его связи и его дочерние элементы в графе, ориентированном по силе D3.

Я работаю над графом, ориентированным на силу, в D3. Я хочу выделить узел, на который наведен указатель мыши, его связи и его дочерние узлы, установив для всех других узлов и ссылок более низкую непрозрачность.

В этом примере, http://jsfiddle.net/xReHA/ , я могу скрыть все ссылки и узлы, а затем исчезнуть в связанных ссылках, но пока я не не удалось элегантно исчезнуть в подключенных узлах, которые являются дочерними по отношению к узлу, на который в данный момент наведен указатель мыши.

Это ключевая функция из кода:

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);
        });
    };
}

Я получаю Uncaught TypeError: невозможно вызвать метод setProperty из неопределенной ошибки, когда я пытаюсь установить непрозрачность для элемента, из которого я загрузил source.target. Я подозреваю, что это неправильный способ загрузить этот узел как объект d3, но я не могу найти другой способ загрузить его, не повторяя снова все узлы, чтобы найти те, которые соответствуют цели или источнику ссылки. Чтобы сохранить разумную производительность, я не хочу перебирать все узлы больше, чем необходимо.

Я взял пример исчезновения ссылок из http://mbostock.github.com/d3/ex/chord.html :

enter image description here

Однако это не показывает, как изменить подключенные дочерние узлы.

Любые хорошие предложения о том, как решить или улучшить эту проблему, будут яростно поддержаны:)

70
задан VividD 27 January 2014 в 13:48
поделиться