chart = {
const svg = d3.create("svg").attr("viewBox", [0, 0, width, height]);
svg.append("g").call(xAxis);
svg.append("g").call(yAxis);
svg.node().update = currLabel => {
const labeled = currLabel ? chart_data.filter(d => d.label == currLabel) : chart_data;
const circles = svg
.selectAll("circle")
.data(labeled, (d, i) => i)
.join(enter =>
enter
.append("circle")
.attr("cx", d => x(d.x))
.attr("cy", y.range()[0])
)
.transition()
.delay(d => x(d.x))
.attr("cx", d => x(d.x))
.attr("cy", d => y(d.y))
.attr("r", 2)
.style("fill", d => {
switch (d.label) {
case "Air System Delay": return "blue";
case "Security Delay": return "orange";
case "Airline Delay": return "purple";
case "Late aircraft delay": return "red";
case "Weather delay": return "green";
case "No delay reason": return "gray";
default: return "gray";
}
})
.style("opacity", 0.5);
};
svg.append("text")
.attr("transform", `translate(${margin.left + (x.range()[1] - x.range()[0]) / 2}, ${height - 6})`)
.style("text-anchor", "middle")
.text("Air Time");
svg.append("text")
.attr("transform", `translate(${margin.left}, ${margin.top - 10})`)
.style("text-anchor", "middle")
.text("Departure Delay");
svg.node().update('');
return svg.node();
}