<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8" />
  <title>D3.js Step by Step: Step 2 - Variable Radius Donut Chart</title>
  <link data-require="normalize@*" data-semver="3.0.1" rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/normalize/3.0.1/normalize.min.css" />
</head>

<body>
  <div id="chart"></div>
  <script src="//cdnjs.cloudflare.com/ajax/libs/d3/3.4.6/d3.min.js" data-semver="3.4.6" data-require="d3@*"></script>
  <script>
      (function(d3) {
        'use strict';

        var dataset = [
          { count: 10, size: 45 }, 
          { count: 20, size: 55 },
          { count: 30, size: 65 },
          { count: 40, size: 75 }
        ];

        var width = 360;
        var height = 360;
        var donutWidth = 75;
        var innerRadius = (Math.min(width, height) / 2) - donutWidth;

        var color = d3.scale.category20b();

        var svg = d3.select('#chart')
          .append('svg')
          .attr('width', width)
          .attr('height', height)
          .append('g')
          .attr('transform', 'translate(' + (width / 2) + 
            ',' + (height / 2) + ')');

        var arc = d3.svg.arc()
          .innerRadius(innerRadius)
          .outerRadius(function (d) { 
            return innerRadius + d.data.size; 
          });
          
        var pie = d3.layout.pie()
          .value(function(d) { return d.count; })
          .sort(null);

        var path = svg.selectAll('path')
          .data(pie(dataset))
          .enter()
          .append('path')
          .attr('d', arc)
          .attr('fill', function(d, i) { 
            return color(i);
          });

      })(window.d3);
    </script>
</body>

</html>
Learn more at: http://zeroviscosity.com/category/d3-js-step-by-step