Ответ 1
Обновление: принятый ответ устарел с момента выпуска D3 v4.9.
В D3 версии 4.9.0 введены формы ссылок, которые имеют ту же функциональность, что и старая d3.svg.diagonal
в D3 v3.
Согласно API:
Форма ссылки генерирует гладкую кубическую кривую Безье от исходной точки до целевой точки. Тангенс кривой в начале и в конце является вертикальным, горизонтальным или радиальным.
Есть три метода:
Итак, для складного дерева, подобного тому, которое вы связали, вы определяете атрибут пути d
как:
.attr("d", d3.linkHorizontal()
.x(function(d) { return d.y; })
.y(function(d) { return d.x; }));
Демо:
Предположим, у вас есть объект с source
и target
, каждый со свойствами x
и y
:
var data = {
source: {
x: 20,
y: 10
},
target: {
x: 280,
y: 100
}
};
Сначала вы создаете генератор ссылок:
var link = d3.linkHorizontal()
.x(function(d) {
return d.x;
})
.y(function(d) {
return d.y;
});
И тогда вы можете нарисовать путь, просто передав эти данные в генератор ссылок:
.attr("d", link(data))
Вот демо:
var svg = d3.select("svg");
var data = {
source: {
x: 20,
y: 10
},
target: {
x: 280,
y: 100
}
};
var link = d3.linkHorizontal()
.x(function(d) {
return d.x;
})
.y(function(d) {
return d.y;
});
svg.append("path")
.attr("d", link(data))
.style("fill", "none")
.style("stroke", "darkslateblue")
.style("stroke-width", "4px");
<script src="https://d3js.org/d3.v5.min.js"></script>
<svg></svg>