function scatter(data, {
width = 640,
height = 400,
margin = 50,
x = (d) => d.bill_length_mm,
y = (d) => d.flipper_length_mm,
} = {}) {
const xScale = d3.scaleLinear()
.domain(d3.extent(data, x))
.range([margin, width - margin])
const yScale = d3.scaleLinear()
.domain(d3.extent(data, y))
.range([height - margin, margin])
var svg = d3.create("svg")
.attr("width", width)
.attr("height", height)
.on("click", addDatapoint);
let xg = svg.append("g").attr("transform", `translate(0,${height-margin})`)
let xAxis = d3.axisBottom(xScale)
xAxis(xg)
let yg = svg.append("g").attr("transform", `translate(${margin},0)`)
let yAxis = d3.axisLeft(yScale)
yAxis(yg)
svg.selectAll("circle")
.data(data)
.join("circle")
.attr("cx", d => xScale(x(d)))
.attr("cy", d => yScale(y(d)))
.attr("r", 5)
function addDatapoint(event) {
let [x, y] = d3.pointer(event);
x = xScale(x);
y = yScale(y);
data = [... data, {
species: "New",
island: "Atlantis",
bill_length_mm: x,
bill_depth_mm: 33.3,
flipper_length_mm: y,
body_mass_g: 333,
sex: "male",
year: 2023,
}];
}
let domElement = svg.node()
return domElement
}