Скрытие корневого узла в дереве d3

1

Я использую эту замечательную демо-версию d3 с взвешенным деревом как точку перехода для диаграммы потока данных. К сожалению, мне действительно нужна возможность иметь отдельные деревья (т.е. Два дерева без подключенных узлов). Я решил решить эту проблему, сделав корневой узел и ветки невидимыми и незаметными. (таким образом, каждый ребенок под ним будет отображаться как отдельное дерево, но все равно будет делать все правильное расстояние.

Я успешно спрятал ссылки с корневого узла на него, добавив новый случай в функцию linkColor, установив цвет в белый цвет и присвоив этому colorCode дочерним элементам root.

Там, где я застрял, скрывается сам корневой узел. Я пробовал сделать его размером 0, но это исчезает и все дети, внуки и т.д. Узлы. И размер 1 все еще виден.

Я попытался перейти на маршрут javascript вместо маршрута данных и попробовал добавить атрибуты стиля, добавив классы, которые скрываются с помощью css, пропускают функции раскраски и т.д. Но основная проблема с javascript заключается в том, что я честно не могу понять как изолировать/НАЙТИ только корневой узел.

Вещи, которые я пробовал:

d3.json("example.com/mylink.json", function(error, flare) {
  edge_weight.domain([0,flare.size]);
  root = flare;
  root.x0 = height / 2;
  root.y0 = 0;
  root.attr("class", "root"); //I've tried this
  root.style("fill", "#ffffff"); //I've tried this
  root.circle.style("fill", "#ffffff"); //tried this
  root.children.forEach(collapse);
  update(root);
});

Я попытался повлиять на свойство узла и параметры/стиль, применяемые к узлам, но опять же, я не могу понять, как вытащить/идентифицировать только корень. Любая помощь/мысли оцениваются!

Теги:
d3.js
tree
nodes

1 ответ

3

root - это объект, содержащий данные дерева, а не корневой узел.

Чтобы скрыть корневой узел и сделать его незаметным, используйте глубину (корень имеет depth = 0)

.style("opacity", function(d, i) {
        return !d.depth ? 0 : 1;
    })
    .style("pointer-events", function(d, i) {
        return !d.depth ? "none" : "all";
    }); 

Для ссылок используйте ту же логику с depth:

.style("opacity", function(d, i) {
        return !d.source.depth ? 0 : 1;
    })
    .style("pointer-events", function(d, i) {
        return !d.source.depth ? "none" : "all";
    });

Поскольку вы не разместили свой код, вот bl.ocks, который вы поделились с этими изменениями: http://bl.ocks.org/anonymous/f29fa00c15a515cae95eb4699128cf03/d2c697b76c8e1e60af1a503b07dcdda94dcd3b2b

Ещё вопросы

Сообщество Overcoder
Наверх
Меню