{
const svg = d3
.create("svg")
.attr("width", chartDimensions.width)
.attr("height", chartDimensions.height);
const chartGroup = svg
.append("g")
.attr(
"transform",
`translate(${chartDimensions.margin.left}, ${chartDimensions.margin.top})`
);
const yAxis = chartGroup.append("g").attr("transform", `translate(${0})`);
yAxis.call(d3.axisLeft(yScale).tickFormat(d3.format("$,")));
const xAxis = chartGroup
.append("g")
.attr("transform", `translate(${0},${chartInnerHeight})`);
xAxis.call(d3.axisBottom(xScale));
const area = d3
.area()
.x((d) => xScale(new Date(d.Year, 0, 1)))
.y1((d) => yScale(d.Price))
.y0(chartInnerHeight)
.curve(d3.curveCardinal);
const line = d3
.line()
.x((d) => xScale(new Date(d.Year, 0, 1)))
.y((d) => yScale(d.Price))
.curve(d3.curveCardinal);
const areaSelection = chartGroup
.selectAll("path.area")
.data([data])
.join("path")
.attr("d", area)
.attr("class", "area")
.attr("fill", "lightblue");
const lineSelection = chartGroup
.selectAll("path.line")
.data([data])
.join("path")
.attr("d", line)
.attr("class", "line")
.attr("fill", "none")
.attr("stroke", "blue");
return svg.node();
}