piechart = {
const svg = d3.select(DOM.svg(width, height));
const g = svg
.append("g")
.attr("transform", `translate(${(width / 2)}, ${height / 2})`);
const arc = g
.selectAll(".arc")
.data(final_data)
.enter()
.append("g")
.classed("arc", true);
paths.forEach((path, index) => {
arc
.append("path")
.attr("d", path.path)
.attr("stroke", "white")
.attr("stroke-width", 2)
.attr("fill", (d) => color(d.data.name))
.attr('opacity', 0.25)
});
const axisGrid = g.append("g").attr("class", "axisWrapper");
const axis = axisGrid
.selectAll(".axis")
.data(final_data)
.enter()
.append("g")
.attr("class", "axis");
const points = g
.selectAll(".graph_points")
.data(final_data)
.enter()
.append("g")
.classed("segment", true)
.selectAll('g')
.classed("points", true)
.append('circle')
.data(d => d.data.points)
.enter()
points.append("g")
.attr(
"transform",
(d) =>
`translate(${d3.pointRadial(
d.placement,
(rScale(maxValue) * yPlacement(d.ring))
).map(x => x-iconsize/2)})`
)
.call(g => g.append("use")
.attr("href", d=>`#A`)
.attr("width", iconsize)
.attr("height", iconsize)
.attr("stroke", "#000")
.attr("fill", (d) => color(d.group_name)))
g
.selectAll("paths")
.data(paths)
.enter()
.append('path')
.attr("id", d => d.ring)
.attr("d", d => d.ringPath())
.attr('fill', 'none')
.attr("transform", "translate(0,5)");
g.selectAll("texts")
.data(paths)
.enter()
.append("text")
.append("textPath")
.attr("xlink:href", d => "#" + d.ring)
.style("text-anchor","left")
.text(d => d.ring)
.attr("fill", 'navy')
.attr("filter", "drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4))")
return svg.node();
}