challenge2 = {
const svg = d3
.create('svg')
.attr('viewBox', [0, 0, measurements.width, measurements.height]);
const xAxis = svg
.append('g')
.attr('class', 'x-axis')
.attr(
'transform',
'translate(0,' + (measurements.height - measurements.marginBottom) + ')'
);
const yAxis = svg
.append('g')
.attr('class', 'y-axis')
.attr('transform', 'translate(' + measurements.marginLeft + ',0)');
svg.node().update = symbol => {
const filteredData = formattedData.filter(d => d.symbol == symbol);
const priceLimits = d3.extent(filteredData, d => +d.price);
const timeLimits = d3.extent(filteredData, d => d.date);
const xScale = d3
.scaleTime()
.domain(timeLimits)
.range([
measurements.marginLeft,
measurements.width - measurements.marginRight
]);
const yScale = d3
.scaleLinear()
.domain(priceLimits)
.range([
measurements.height - measurements.marginBottom,
measurements.marginTop
]);
xAxis.call(d3.axisBottom().scale(xScale));
yAxis.call(d3.axisLeft().scale(yScale));
const stockTrendLineGen = d3
.line()
.x(d => xScale(d.date))
.y(d => yScale(+d.price));
svg
.selectAll(".trend-line")
.data([{ data: filteredData }])
.join('path')
.attr('class', 'trend-line')
.attr('fill', 'none')
.attr('stroke', 'orange')
.transition()
.attr('d', d => stockTrendLineGen(d.data));
};
return svg.node();
}