Изменить размер только корневого узла древовидной структуры

Я использую код, найденный здесь: http://bl.ocks.org/1249394 для этого дерева. диаграмма.

Как изменить размер только корневого узла? Я хочу, чтобы корневой узел имел размер, отличный от размера всех дочерних узлов. Как мне это сделать?


person user1684586    schedule 22.09.2012    source источник


Ответы (1)


По сути, вам нужно свойство, которое вы можете использовать, чтобы различать узлы. Похоже, существует родительское свойство, которое можно использовать, чтобы выяснить, когда node является root. Поэтому вам просто нужно изменить функции добавления, чтобы изменить радиус окружности, если у узла нет родителя (то есть это корень).

nodeEnter.append("svg:circle")
  .attr("r", function(d) { return !d.parent ? 8.5 : 4.5; })
  .style("fill", function(d) { return d._children ? "lightsteelblue" : "#fff"; })
  .on("click", click);

Вы можете увидеть рабочий пример по адресу http://bl.ocks.org/3767443.

В общем, если вы хотите изменить определенные узлы, вы можете добавить новое свойство к узлам, которые вы хотите отличать, например:

{
    "name": "MAT",
    "root": true,
    "children": [
        { ... } ... 
    ]
}

Затем вы можете использовать это свойство для изменения узла по мере его добавления (здесь я изменяю круг, но вы можете сделать то же самое для текста по мере его добавления). Обратите внимание, что вместо того, чтобы жестко задавать размер круга равным 4,5, я теперь использую свойство root, чтобы увеличить корневые узлы.

nodeEnter.append("svg:circle")
    .attr("r", function(d) { return d.root ? 8 : 4.5; })
    .style("fill", function(d) { return d._children ? "lightsteelblue" : "#fff"; })
    .class(function(d) { return d.root ? 'root-node' : 'normal-node'; })
    .on("click", click);

Если вы также установите класс, как я сделал выше, вы можете использовать CSS для стилизации корневого узла, как хотите:

.root-node {
  cursor: pointer;
  fill: #fff;
  stroke: green;
  stroke-width: 3.5px;
}
person Bill    schedule 22.09.2012