Search notes:

d3.js - Bar Charts

Width of DIV

The following example constructs a bar chart by creating a <div> element for each bar and setting its width CSS style.
First, d3.select('.bar-chart') selects the DIV into which the bar chart will be placed (.bar-chart) and then applies selectAll() (which is not entirely clear to me why this step is needed) and then assigns an array of values (.data()) and finally creates (.append()) the divs for each bar with their corresponding widht and text:
<!DOCTYPE html>
<html>
<head>
  <meta content="text/html;charset=utf-8" http-equiv="Content-Type">
  <title>d3.js: Bar Chart</title>

  <style type="text/css">

    .bar-chart {
      border: #f72 solid 1px;
      display: inline-block
    }

    .bar-chart div {
      background-color:#fa5;
      margin: 2px;
      color: #713;
      text-align: right}
  </style>

  <script src="https://cdnjs.cloudflare.com/ajax/libs/d3/7.6.1/d3.min.js"></script>

  <script type="text/javascript">
    
    function main() {

      d3.select('.bar-chart').
        selectAll().             // What is this step really needed for?
        data([194, 52, 228, 268, 163, 138, 92]).
        enter().
          append('div').
          style ('width', function(d) {return d + "px"}).
          text  (         function(d) {return d       });
      
    }

  </script>
</head>
<body onload='main()'>

  <div class='bar-chart'></div>

</body>
</html>
Github repository about-d3.js, path: /chart/bar/div-width.html

scaleLinear

The following example uses d3.scaleLinear to create a function with which the length of the bar chart is scaled across the entire screen.
<!DOCTYPE html>
<html>
<head>
  <meta content="text/html;charset=utf-8" http-equiv="Content-Type">
  <title>d3.js: Bar chart (scaled)</title>

  <style type="text/css">

    .bar-chart {
      border: #f72 solid 1px;
      display: inline-block
    }

    .bar-chart div {
      background-color:#fa5;
      margin: 2px;
      color: #713;
      text-align: right}
  </style>

  <script src="https://cdnjs.cloudflare.com/ajax/libs/d3/7.6.1/d3.min.js"></script>
  <script>

    var data = [194, 52, 228, 268, 163, 138, 92];
    
    function main() {

      var scale=d3.scaleLinear().
            domain([0, d3.max(data)]).
            range([0, window.innerWidth - 20]);

      d3.select('.bar-chart').
        selectAll('div').
        data(data).
        enter().
          append('div').
          style ('width', function(d) {return scale(d) + "px"}).
          text  (         function(d) {return d              });
      
    }

  </script>
</head>
<body onload='main()'>

  <div class='bar-chart'></div>

</body>
</html>
Github repository about-d3.js, path: /chart/bar/scaleLinear.html

SVG

This example creates a bar chart using SVG primitives rathern than a DIV element:
<!DOCTYPE html>
<html>
<head>
  <meta content="text/html;charset=utf-8" http-equiv="Content-Type">
  <title>d3.js: Bar chart (scaled)</title>

  <style type="text/css">


    #bar-chart rect {
      fill:#fa5;
    }

    #bar-chart text {
      fill:#03f;
      font: 10px sans-serif;
      text-anchor: end;
    }

  </style>

  <script src="https://cdnjs.cloudflare.com/ajax/libs/d3/7.6.1/d3.min.js"></script>
  <script>

    var data = [194, 52, 228, 268, 163, 138, 92];

    var bar_height = 20;
    
    function main() {

      var  window_width = window.innerWidth;

      var scale=d3.scaleLinear().
            domain([0, d3.max(data)]).
            range([0, window_width - 20]);

      var bar_chart = d3.select('#bar-chart').
            attr('width' , window_width).
            attr('height', bar_height * data.length);


      var bar = bar_chart.selectAll('g').
                  data(data).
                enter().append('g').
                  attr('transform', function(d, i) {return 'translate(0,' + i* bar_height + ')'; });

          bar.append('rect').
                attr('width', scale).
                attr('height', bar_height-3)

          bar.append('text').
               attr('x', function(d) {return scale(d) - 3;}).
               attr('y', bar_height / 2).
               attr('dy', '.25em').
               text(function(d){return d});

      
    }

  </script>
</head>
<body onload='main()'>

  <svg id="bar-chart"></svg>

</body>
</html>
Github repository about-d3.js, path: /chart/bar/svg.html

See also

Data visualization: Bar charts
D3.js

Index