xAxis = (g) =>
g
.attr("font-family", "sans-serif")
.attr("font-size", 10)
.call((g) =>
g
.selectAll("g")
.data(Array.from(Array(13), (x, i) => 45 * i + 22.5))
.join("g")
.call((g) =>
g
.append("path")
.attr("stroke", "#000")
.attr("stroke-opacity", 0.2)
.attr(
"d",
(d) => `
M${d3.pointRadial((d * Math.PI) / 180, innerRadius)}
L${d3.pointRadial((d * Math.PI) / 180, outerRadius)}
`
)
)
.call((g) =>
g
.append("path")
.attr("id", (d) => "xTick" + d)
.attr("fill", "none")
.attr(
"d",
(a) => `
M${d3.pointRadial(((a - 10) * Math.PI) / 180, innerRadius - 20)}
A${innerRadius},${innerRadius} 0,0,1 ${d3.pointRadial(
((a + 10) * Math.PI) / 180,
innerRadius - 20
)}
`
)
)
.call(
(g) =>
g
.append("text")
.append("textPath")
.attr("text-anchor", "middle")
.attr("startOffset", "50%")
.attr("xlink:href", (d) => "#xTick" + d)
.text((d) => (d ? d + "°" : ""))
)
)