{
const binData = d3.bin()(oldFaithfulData.map(d => d[waiting_OR_eruption]));
const binDomain = binData.map(d => `${d.x0}-${d.x1}`);
const [svgNode, svg] = getSVG();
const xBandScale = d3
.scaleBand()
.domain(binDomain)
.range([0, W])
.padding(0.01);
const xRange = [
xBandScale(binDomain[0]),
xBandScale(binDomain[binDomain.length - 1]) + xBandScale.bandwidth()
];
const xDomain = [binData[0].x0, binData[binData.length - 1].x1];
const xScale = d3
.scaleLinear()
.domain(xDomain)
.range(xRange);
const yScale = d3
.scaleLinear()
.domain([0, d3.max(binData, d => d.length)])
.nice()
.range([H, 0]);
svg
.append("g")
.style("fill", "steelblue")
.selectAll("rect")
.data(binData)
.join("rect")
.attr("x", d => xBandScale(`${d.x0}-${d.x1}`))
.attr("width", xBandScale.bandwidth())
.attr("y", d => yScale(d.length))
.attr("height", d => yScale(0) - yScale(d.length));
const xBandAxis = g =>
g
.attr("transform", `translate(0,${H})`)
.call(d3.axisBottom(xBandScale).tickSizeOuter(0))
.call(g => g.selectAll(".domain").remove());
svg.append("g").call(xBandAxis);
svg
.append("text")
.attr("transform", `translate(${W / 2},${H})`)
.style("text-anchor", "middle")
.attr("dy", 30)
.text(`${waiting_OR_eruption} in minutes`);
const yAxis = g =>
g.call(d3.axisLeft(yScale)).call(g => g.selectAll(".domain").remove());
svg.append("g").call(yAxis);
const areaGenerator = d3
.area()
.y0(yScale(0))
.y1(d => yScale(d.length))
.x(d => xScale((d.x0 + d.x1) / 2))
.curve(d3.curveBasis);
svg
.append("path")
.datum(binData)
.style("stroke", "black")
.style("fill", "#fcd88a")
.style("opacity", 0.4)
.attr("d", areaGenerator);
return svgNode;
}