function drawAxis(
svg,
scale,
orient,
pos,
title = "",
tpos = null,
trot = null
) {
let [f, x, y, tx, ty, r] = {
top: [d3.axisTop, 0, pos, d3.sum(scale.range()) / 2, -30, 0],
bottom: [d3.axisBottom, 0, pos, d3.sum(scale.range()) / 2, 30, 0],
left: [d3.axisLeft, pos, 0, -30, d3.sum(scale.range()) / 2, 270],
right: [d3.axisRight, pos, 0, 30, d3.sum(scale.range()) / 2, 90]
}[orient];
if (tpos != null) [tx, ty] = tpos;
if (trot != null) r = trot;
let a = tpos != null ? "start" : "middle";
let label = null;
let g = svg
.append("g")
.attr("transform", `translate(${x}, ${y})`)
.call(f(scale));
if (title != "")
label = g
.append("text")
.style("fill", "black")
.attr("text-anchor", a)
.attr("transform", `translate(${tx},${ty}) rotate(${r})`)
.html(title);
g.update = function (scaleNew) {
g.call(f(scaleNew));
};
return [g, label];
}