scatter_chart = {
const svg = d3.create("svg")
.attr("viewBox", [0, 0, width, height]);
const title = svg
.append("text")
.attr("class", "chart_title")
.attr("transform", `translate(${width / 2},15)`)
.text("")
.style("text-anchor", "middle");
var data = filteredCrop;
if (dataset == "Zoomed In") {
data = focusedCrop;
svg.append("g")
.call(filteredXAxis);
svg.node().update = pos => {
const marks = svg.selectAll('circle')
.data(data)
.join(
enter => enter.append("circle")
.attr("cx", d => filteredX_scale(parseInt(d.value)))
.attr("cy", d => height - margin.bottom)
.attr("r", d => 100 / y_scale(meatSums.get(d.country_or_area)) * 50)
.attr("fill", d => color(meatSums.get(d.country_or_area)))
.style("opacity", 0.7),
update => update,
exit => exit
)
.transition(1000)
.duration(1000)
.delay(d => filteredX_scale(parseInt(d.value)))
.attr("cy", d => y_scale(meatSums.get(d.country_or_area)))
title.text("Cereals Production vs. Meat Consumption in " + meatYear)
}
} else {
data = filteredCrop;
svg.append("g")
.call(xAxis);
svg.node().update = pos => {
const marks = svg.selectAll('circle')
.data(data)
.join(
enter => enter.append("circle")
.attr("cx", d => x_scale(parseInt(d.value)))
.attr("cy", d => height - margin.bottom)
.attr("r", d => 100 / y_scale(meatSums.get(d.country_or_area)) * 30)
.attr("fill", d => color(meatSums.get(d.country_or_area)))
.style("opacity", 0.7),
update => update,
exit => exit
)
.transition(1000)
.duration(1000)
.delay(d => x_scale(parseInt(d.value)))
.attr("cy", d => y_scale(meatSums.get(d.country_or_area)))
title.text("Cereals Production vs. Meat Consumption in " + meatYear)
}
}
svg.append("text")
.attr("class", "x-axis")
.attr("transform", `translate(${width / 2}, ${height - margin.top + 10})`)
.style("text-anchor", "middle")
.text("Crop Production (tonnes)");
svg.append("g")
.call(yAxis);
svg.append("text")
.attr("class", "y-axis")
.attr("transform", `translate(15, ${height / 2})rotate(-90)`)
.style("text-anchor", "middle")
.text("Meat Consumption (KG per Capita)");
return svg.node()
}