Skip to content

Pie Chart ​

x-h-chart-pie draws a pie chart 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. Use a pie chart to show how parts make up a whole. 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-pie

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. For color values, see Colors.
series{ data: number[] }[] + labelsrequiredAlternative to slices. Тhe first series' values become slices, named by labels.
legendbooleantrueShow the color/label key.
tooltipbooleantrueShow a tooltip on hover and emit interaction events.
dataLabelsbooleantrueDraw each slice's percentage on the slice (hidden for slices under 5%).
labelPosition'inside' | 'outside''inside'Place the percentage labels inside each slice or just outside the slice edge.
valueFormat(value) => stringlocale numberFormats values in tooltips.
palettestring[]color-1 to color-9Chart colors cycled for slices without an explicit color. See Colors for more information.
tableLabels{ segment?, value? }English defaultsColumn headers of the hidden data table read by screen readers.

Colors ​

A slice color (and the palette entries) is one of the chart colors color-1 to color-12. They paint with the theme's --chart-color-1 to --chart-color-12 variables (see Theme Customization). By default, they map to blue, red, green, orange, purple, teal, pink, indigo, yellow, gray, white and black. The standard color names (red, orange, yellow, green, teal, blue, indigo, purple, pink, gray, white and black) are deprecated. They still work but they will be removed in the next major version.

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 slices and legend are marked decorative). It defaults to the accessible name "Pie chart". Set an aria-label attribute on the element to give it a more meaningful name.

Events ​

When tooltip is enabled, hovering and clicking data emit bubbling CustomEvents on the chart element. These events are shared by all chart types.

EventFired when
chart-hoverThe pointer enters a bar/point/slice.
chart-leaveThe pointer leaves a bar/point/slice.
chart-clickA bar/point/slice is clicked.

Each event's detail is:

js
{
  type: 'bar' | 'point' | 'slice',
  seriesName: string | undefined,
  seriesIndex: number,
  categoryIndex: number, // data index (bar/line) or slice index (pie)
  label: string,
  value: number,
  color: string          // 'color-1' to 'color-12', or a deprecated standard color name
}

Clicking or tapping a data point pins its tooltip open (useful on touchscreens, where there is no hover). The pinned tooltip stays until another point is clicked or a press lands elsewhere.

Data Slots ​

SlotElement
chartx-h-chart-pie
chart-svgThe chart drawing
chart-pieA slice
chart-labelA value label
chart-legendThe legend
chart-legend-swatchA legend color swatch
chart-tooltipThe hover tooltip
chart-tableThe data table for assistive technologies
chart-emptyThe message shown when there is no data

Examples ​

Basic ​

html
<div
  class="aspect-square h-full"
  style="max-height: 20rem"
  x-h-chart-pie="{
    slices: [
      { label: 'Direct', value: 4120 },
      { label: 'Referral', value: 2580 },
      { label: 'Social', value: 2060 },
      { label: 'Other', value: 1540 }
    ]
  }"
></div>

Labels outside the slices ​

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