scatterPlot = {
let w = 550;
let h = 350;
const margin = ({top: 20, right: 20, bottom: 20, left: 30})
const numDataPoints = 50;
let maxRange = Math.random() * 1000;
let dataset = [];
for (let i = 0; i < numDataPoints; i++) {
let newNumber1 = Math.floor(Math.random() * maxRange);
let newNumber2 = Math.floor(Math.random() * maxRange);
dataset.push([newNumber1, newNumber2])
}
let xScale = d3.scaleLinear()
.domain([0, d3.max(dataset, d => d[0])])
.range([margin.left, w - margin.right]);
let yScale = d3.scaleLinear()
.domain([0, d3.max(dataset, d => d[1])])
.range([h - margin.bottom, margin.top]);
let xAxis = d3.axisBottom()
.scale(xScale)
.ticks(5);
let yAxis = d3.axisLeft()
.scale(yScale)
.ticks(5);
const svg = d3.create("svg").attr("width", w).attr("height", h).style("background-color", "black");
let circles = svg.selectAll("circle")
.data(dataset)
.join("circle")
.attr("cx", d => xScale(d[0]))
.attr("cy", d => yScale(d[1]))
.attr("r", 2)
.style("fill", "white");
svg.append("g")
.attr("class", "x axis")
.attr("transform", "translate (0, "+ (h - margin.bottom) + ") ")
.call(xAxis);
svg.append("g")
.attr("class", "y axis")
.attr("transform", "translate ("+ margin.left +", 0)")
.call(yAxis);
d3.select(newDataPoints)
.on("click", function () {
let numValues = dataset.length;
maxRange = Math.random() * 1000;
dataset = [];
for (let i = 0; i < numValues; i++) {
let newNumber1 = Math.floor(Math.random() * maxRange);
let newNumber2 = Math.floor(Math.random() * maxRange);
dataset.push([newNumber1, newNumber2])
};
xScale.domain([0, d3.max(dataset, d => d[0])]);
yScale.domain([0, d3.max(dataset, d => d[1])]);
svg.selectAll("circle")
.data(dataset)
.transition()
.duration(1000)
.attr("cx", d => xScale(d[0]))
.attr("cy", d => yScale(d[1]))
xAxis.scale(xScale);
yAxis.scale(yScale);
svg.select(".x.axis")
.transition()
.duration(1000)
.call(xAxis)
svg.select(".y.axis")
.transition()
.duration(1000)
.call(yAxis)
})
return svg.node()
}