Nika Mavrody
11/28/2023, 6:13 AMFil
11/28/2023, 6:56 AMNicole Mark
11/29/2023, 2:32 PMMike
12/01/2023, 8:34 PMJeremy Côté
12/01/2023, 9:38 PMHena
12/01/2023, 10:42 PMBrian Morgan
12/04/2023, 5:04 PMChristoph Pahmeyer
12/05/2023, 9:32 AMTom Larkworthy
12/05/2023, 10:13 AMBrian Morgan
12/05/2023, 12:45 PMJavier Cardenas
12/09/2023, 8:23 PMMisha Tsvelik
12/15/2023, 9:56 AMFil
12/15/2023, 1:37 PMMisha Tsvelik
12/15/2023, 2:15 PMmrtz mrtzi
12/16/2023, 7:10 PMMihael Ankerst
12/17/2023, 9:58 AMfunction createLinks(root, nodeArray) {
let node1, node2;
let result = [];
for (let pair of nodeArray) {
node1 = root.find((d) => d.data.name === pair[0]);
node2 = root.find((d) => d.data.name === pair[1]);
if (node1 && node2) {
result.push({
source: [node1.x, node1.y],
target: [node2.x, node2.y]
});
}
}
return result;
}
2. You draw the links
// add this part to create additional links
const myNewLinks = [["B", "D"]];
const newLinks = svg
.append("g")
.attr("fill", "none")
.attr("stroke", "red")
.attr("stroke-opacity", 0.4)
.attr("stroke-width", 1.5)
.selectAll()
.data(createLinks(root, myNewLinks))
.join("path")
.attr(
"d",
d3
.linkHorizontal()
.source(function (d) {
return [d.source[1], d.source[0]];
})
.target(function (d) {
return [d.target[1], d.target[0]];
})
);
// end additional part
https://observablehq.com/d/35bb3b04215ecc37Zach Bogart
12/22/2023, 12:24 AMC. bon
12/22/2023, 10:55 PMFil
12/24/2023, 12:07 PMC. bon
12/26/2023, 12:18 PMSlackbot
01/02/2024, 4:49 PMFabian Iwand
01/02/2024, 4:51 PMClifton Wood
01/03/2024, 11:06 AMMisha Tsvelik
01/15/2024, 11:32 AMFil
01/15/2024, 8:17 PMNicole Mark
01/18/2024, 2:50 PMAllison (Observable Team)
01/23/2024, 1:30 PMAllison (Observable Team)
01/23/2024, 1:32 PMAllison (Observable Team)
01/23/2024, 1:44 PM