<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>d3.scaleLinear</title>
    <script src="https://d3js.org/d3.v7.js"></script>
  </head>

  <body>

  <script>

// Create svg and initial bars

  const w = 400;
  const h = 300;

  const svg = d3.select("body")
    .append("svg")
      .attr("width", w)
      .attr("height", h)
      .style("fill", "yellow");

  const bardata = [5, 6, 10, 3, 2, 12];  // change data values and see what happens

  const xScale = d3.scaleBand()
      .domain(d3.range(bardata.length))
      .range([0, w])
      .paddingInner(.1);

  const yScale = d3.scaleLinear()
      .domain([0, d3.max(bardata)])
      .range([h, 0])

  const bars = svg.selectAll("rect")
      .data(bardata);

  bars.enter().append("rect")
      .attr("x", (d, i) => xScale(i))
      .attr("y", d => yScale(d))
      .attr("width", xScale.bandwidth())
      .attr("height", d => h - yScale(d))
      .attr("fill", "lightgreen");

  svg.selectAll("text")
      .data(bardata)
      .enter()
      .append("text")
      .attr("x", (d, i) => xScale(i) + .5*xScale.bandwidth())
      .attr("y", d => yScale(d) + 25)
      .text(d => d)
      .attr("fill", "blue")
      .attr("text-anchor", "middle");

    </script>

  </body>

</html>