Skip to content

Doughnut Chart

x-h-chart-doughnut draws a doughnut chart (a pie with a hole in the middle) from a single reactive configuration object. Charts inherit the active theme colors and adapt to light and dark mode automatically.

Usage

Give the chart a container with an explicit height (charts fill their parent). Provide the slices to draw, each with a label and a value. A doughnut reads the same as a Pie Chart. Use it when you prefer the lighter ring style or want to leave the center open. To compare discrete categories use a Bar Chart, and for trends over an ordered sequence use a Line Chart.

API Reference

Component attribute(s)

x-h-chart-doughnut

Attributes

AttributeTypeRequiredDescription
data-font-sizexs
sm
base
lg
falseChanges the size of all chart text, such as labels, axis ticks, and the legend. Defaults to xs.

Configuration

KeyTypeDefaultDescription
slices{ label, value, color? }[]requiredThe slices to draw. Only positive values are shown.
series{ data: number[] }[] + labelsrequiredAlternative to slices: the first series' values become slices, named by labels.
cutoutnumber0.6Hole size as a fraction of the radius (clamped to 0.2-0.9).
legendbooleantrueShow the color/label key.
tooltipbooleantrueShow a tooltip on hover and emit interaction events.
dataLabelsbooleantrueDraw each slice's percentage on the ring (hidden for slices under 5%).
labelPosition'inside' | 'outside''inside'Place the percentage labels on the ring or just outside the edge.
valueFormat(value) => stringlocale numberFormats values in tooltips.
palettestring[]theme tokensColor tokens cycled for slices without an explicit color.

A slice color (and the palette entries) is one of the standard color names: red, orange, yellow, green, teal, blue, indigo, purple, pink, gray, white, or black.

Accessibility

The chart is exposed to assistive technologies as a figure with a visually-hidden data table of its segments and values, so screen-reader users get the underlying numbers (the visual ring and legend are marked decorative). It defaults to the accessible name "Doughnut chart". Set an aria-label attribute on the element to give it a more meaningful name.

Events

When tooltip is enabled, hovering and clicking slices emit bubbling CustomEvents on the chart element. See the events reference for the shared detail shape.

Examples

Basic

html
<div
  class="aspect-square h-full"
  style="max-height: 20rem"
  x-h-chart-doughnut="{
    slices: [
      { label: 'Direct', value: 40 },
      { label: 'Referral', value: 25 },
      { label: 'Social', value: 20 },
      { label: 'Other', value: 15 }
    ]
  }"
></div>

Thinner ring

html
<div
  class="aspect-square h-full"
  style="max-height: 20rem"
  x-h-chart-doughnut="{
    cutout: 0.8,
    slices: [
      { label: 'Direct', value: 40 },
      { label: 'Referral', value: 25 },
      { label: 'Social', value: 20 },
      { label: 'Other', value: 15 }
    ]
  }"
></div>