Code

D3.js

Pie / Donut Chart

Intermediate Donut chart using d3.pie() to compute arc angles and d3.arc() to generate SVG paths with an innerRadius. d3-shape/pie

const pie = d3.pie()
  .value(d => d.value)
  .sort(null);          // preserve input order

// Donut: innerRadius > 0
const arc = d3.arc()
  .innerRadius(55)
  .outerRadius(110);

// Arc for centroid label placement
const labelArc = d3.arc()
  .innerRadius(126)
  .outerRadius(126);

const arcs = pie(data);   // compute start/end angles

g.selectAll('path')
  .data(arcs)
  .join('path')
  .attr('d', arc)
  .attr('fill', d => d.data.color)
  .attr('stroke', '#fff')
  .attr('stroke-width', 2);

// Label at arc centroid
g.selectAll('text')
  .data(arcs)
  .join('text')
  .attr('transform', d => `translate(${arc.centroid(d)})`)
  .attr('text-anchor', 'middle')
  .text(d => `${d.data.value}%`);
Key APIs
  • d3.pie() — computes start/end angles from data values
  • d3.arc() — SVG arc path generator with inner & outer radius
  • arc.centroid(d) — returns the midpoint [x,y] of an arc (for labels)
  • pie.sort(null) — disables automatic sorting of pie slices
  • Set innerRadius(0) for a full pie, or > 0 for a donut