md`
In Chapter 9, \`25_adding_values.html\`, assign a name of "previous_rects" to the rect generating codes before \`d3.select("p")\`. Then, modify the \`d3.select("p").on("click", function(){})\` this way, and explain what happens:
d3.select("p")
.on("click", function() {
var maxValue = 25;
var newNumber = Math.round(Math.random() * maxValue);
dataset.push(newNumber);
xScale.domain(d3.range(dataset.length))
yScale.domain([0, d3.max(dataset)]);
var bars = svg.selectAll("rect")
.data(dataset)
svg.selectAll("rect")
.data(dataset)
.enter()
.append("rect")
.attr("x", w / dataset.length)
.attr("y", function(d) {
return h - yScale(d);
})
.attr("width", xScale.bandwidth())
.attr("height", function(d) {
return yScale(d);
})
.attr("fill", "red")
.merge(previous_rects)
.transition()
.duration(500)
.attr("x", function(d, i){
return xScale(i);
})
.attr("y", function(d){
return h - yScale(d);
})
.attr("width", xScale.bandwidth())
.attr("height", function(d){
return yScale(d);
})
.style("fill", function(d){
return "rgb(0, 0, "+ Math.round(d * 10) +")"
});
});
Try to understand how the above codes worked.
`