Я только что поиграл со ссылкой Observable, и похоже, что есть 3 фрагмента кода, которые нужно изменить, чтобы сделать ссылки короче:
// Enter any new nodes at the parent's previous position.
const nodeEnter = node.enter().append("g")
.attr("transform", d => `translate(${source.y0/2},${source.x0})`)
// Transition nodes to their new position.
const nodeUpdate = node.merge(nodeEnter).transition(transition)
.attr("transform", d => `translate(${d.y/2},${d.x})`)
diagonal = d3.linkHorizontal().x(d => d.y/2).y(d => d.x)
Я добавил "/ 2 "на половину ширины ссылок.
Итак, чтобы сделать это условным, вы можете попробовать добавить оператор if в вышеуказанных 3 местах?