function PieChart(data, colorScheme, onClick) {
const margin = 10;
const radius = 100;
const svg = d3
.create("svg")
.attr("width", radius * 2 + margin * 2)
.attr("height", radius * 2 + margin * 2);
const g = svg
.append("g")
.attr("transform", `translate(${radius + margin},${radius + margin})`);
const pie = d3
.pie()
.value((d) => d.values.length)
.sortValues(null)
.sort(null);
const pied = pie(data);
const arc = d3.arc().outerRadius(radius).innerRadius(0);
const cscale = d3.scaleOrdinal(colorScheme).domain(data.map((d) => d.key));
const path = g
.selectAll("path")
.data(pied, (d) => d.data.key)
.join(
(enter) => {
const path_enter = enter.append("path");
path_enter.append("title");
path_enter.on("click", (event, d) => {
onClick(d);
});
return path_enter;
}
);
path
.classed("selected", (d) => d.data.key === svg.value)
.attr("d", arc)
.style("fill", (d) => cscale(d.data.key));
path.select("title").text((d) => `${d.data.key}: ${d.data.values.length}`);
return svg.node();
}