{
let w = 800;
let h = 500;
let svg = d3
.create("svg")
.attr("viewBox", [0, 0, w, h])
.attr("width", "100%")
.style("max-width", `${w}px`)
.style("border", "solid black 2px");
let pad = 10;
let [xmin, xmax, ymin, ymax] = [-3, 5, -2, 3];
let x_scale = d3
.scaleLinear()
.domain([xmin, xmax])
.range([pad, w - pad]);
let y_scale = d3
.scaleLinear()
.domain([ymin, ymax])
.range([h - pad, pad]);
let n = 5;
let pts = d3
.range(n)
.map((i) => [
Math.sin((2 * Math.PI * i) / n),
Math.cos((2 * Math.PI * i) / n)
]);
svg
.append("polygon")
.attr(
"points",
pts.map(([x, y]) => [x_scale(x), y_scale(y)])
)
.attr("fill", "lightgray")
.attr("stroke", "black");
svg
.append("g")
.style("font-size", "14px")
.attr("transform", `translate(0, ${y_scale(0)})`)
.call(d3.axisBottom(x_scale).tickValues([-3, -2, -1, 1, 2, 3, 4, 5]));
svg
.append("g")
.style("font-size", "14px")
.attr("transform", `translate(${x_scale(0)}, 0)`)
.call(d3.axisLeft(y_scale).tickValues([-2, -1, 1, 2, 3]));
return svg.node();
}