DocumentationPieChart
PieChart
A responsive pie chart component built on Recharts for visualizing data proportions and distributions.
Install Dependencies
npx quickcode-ui add PieChartpnpm dlx quickcode-ui add PieChartyarn dlx quickcode-ui add PieChartbunx quickcode-ui add PieChartExamples
Basic
Basic Pie Chart
import { PieChart, Pie, ChartContainer, ChartTooltip, ChartTooltipContent, type ChartConfig } from '@/components/ui/PieChart' const data = [ { name: "Chrome", value: 275, fill: "var(--color-chrome)" }, { name: "Safari", value: 200, fill: "var(--color-safari)" }, { name: "Firefox", value: 187, fill: "var(--color-firefox)" }, { name: "Edge", value: 173, fill: "var(--color-edge)" }, { name: "Other", value: 90, fill: "var(--color-other)" }, ] const config: ChartConfig = { chrome: { label: "Chrome", color: "var(--chart-1)" }, safari: { label: "Safari", color: "var(--chart-2)" }, firefox: { label: "Firefox", color: "var(--chart-3)" }, edge: { label: "Edge", color: "var(--chart-4)" }, other: { label: "Other", color: "var(--chart-5)" }, } export function BasicPieChart() { return ( <ChartContainer config={config} className="h-[350px]"> <PieChart> <ChartTooltip content={ChartTooltipContent} /> <Pie data={data} dataKey="value" nameKey="name" cx="50%" cy="50%" outerRadius={120} /> </PieChart> </ChartContainer> ) }
With Labels
Pie Chart with Labels
import { PieChart, Pie, ChartContainer, ChartTooltip, ChartTooltipContent, type ChartConfig } from '@/components/ui/PieChart' const data = [ { name: "Chrome", value: 275, fill: "var(--color-chrome)" }, { name: "Safari", value: 200, fill: "var(--color-safari)" }, { name: "Firefox", value: 187, fill: "var(--color-firefox)" }, { name: "Edge", value: 173, fill: "var(--color-edge)" }, { name: "Other", value: 90, fill: "var(--color-other)" }, ] const config: ChartConfig = { chrome: { label: "Chrome", color: "var(--chart-1)" }, safari: { label: "Safari", color: "var(--chart-2)" }, firefox: { label: "Firefox", color: "var(--chart-3)" }, edge: { label: "Edge", color: "var(--chart-4)" }, other: { label: "Other", color: "var(--chart-5)" }, } export function LabelPieChart() { return ( <ChartContainer config={config} className="h-[350px]"> <PieChart> <ChartTooltip content={ChartTooltipContent} /> <Pie data={data} dataKey="value" nameKey="name" cx="50%" cy="50%" outerRadius={120} label /> </PieChart> </ChartContainer> ) }
Custom Labels
Pie Chart with Custom Labels
import { PieChart, Pie, ChartContainer, ChartTooltip, ChartTooltipContent, type ChartConfig } from '@/components/ui/PieChart' const data = [ { name: "Chrome", value: 275, fill: "var(--color-chrome)" }, { name: "Safari", value: 200, fill: "var(--color-safari)" }, { name: "Firefox", value: 187, fill: "var(--color-firefox)" }, { name: "Edge", value: 173, fill: "var(--color-edge)" }, { name: "Other", value: 90, fill: "var(--color-other)" }, ] const config: ChartConfig = { chrome: { label: "Chrome", color: "var(--chart-1)" }, safari: { label: "Safari", color: "var(--chart-2)" }, firefox: { label: "Firefox", color: "var(--chart-3)" }, edge: { label: "Edge", color: "var(--chart-4)" }, other: { label: "Other", color: "var(--chart-5)" }, } const renderCustomLabel = ({ name, percent }: any) => { return `${name} ${(percent * 100).toFixed(0)}%` } export function CustomLabelPieChart() { return ( <ChartContainer config={config} className="h-[350px]"> <PieChart> <ChartTooltip content={ChartTooltipContent} /> <Pie data={data} dataKey="value" nameKey="name" cx="50%" cy="50%" outerRadius={120} label={renderCustomLabel} /> </PieChart> </ChartContainer> ) }
With Legend
Pie Chart with Legend
Chrome
Safari
Firefox
Edge
Other
import { PieChart, Pie, ChartContainer, ChartTooltip, ChartTooltipContent, type ChartConfig } from '@/components/ui/PieChart' import { Chrome, Globe, Flame, Box } from "lucide-react"; const data = [ { name: "Chrome", value: 275, fill: "var(--color-chrome)" }, { name: "Safari", value: 200, fill: "var(--color-safari)" }, { name: "Firefox", value: 187, fill: "var(--color-firefox)" }, { name: "Edge", value: 173, fill: "var(--color-edge)" }, { name: "Other", value: 90, fill: "var(--color-other)" }, ] const config: ChartConfig = { chrome: { label: "Chrome", color: "var(--chart-1)" }, safari: { label: "Safari", color: "var(--chart-2)" }, firefox: { label: "Firefox", color: "var(--chart-3)" }, edge: { label: "Edge", color: "var(--chart-4)" }, other: { label: "Other", color: "var(--chart-5)" }, } const iconMap: Record<string, any> = { Chrome: Chrome, Safari: Globe, Firefox: Flame, Edge: Box, Other: Globe, }; const CustomLegend = () => { return ( <div className="flex justify-center gap-6 flex-wrap mt-4"> {data.map((entry) => ( <div key={entry.name} className="flex items-center gap-2"> <div className="w-3 h-3 rounded" style={{ backgroundColor: entry.fill }} /> <span className="text-sm text-muted-foreground">{entry.name}</span> </div> ))} </div> ) } export function LegendPieChart() { return ( <div> <ChartContainer config={config} className="h-[300px]"> <PieChart> <ChartTooltip content={ChartTooltipContent} /> <Pie data={data} dataKey="value" nameKey="name" cx="50%" cy="50%" outerRadius={100} /> </PieChart> </ChartContainer> <CustomLegend /> </div> ) }
Donut
Donut Chart
import { PieChart, Pie, ChartContainer, ChartTooltip, ChartTooltipContent, type ChartConfig } from '@/components/ui/PieChart' const data = [ { name: "Chrome", value: 275, fill: "var(--color-chrome)" }, { name: "Safari", value: 200, fill: "var(--color-safari)" }, { name: "Firefox", value: 187, fill: "var(--color-firefox)" }, { name: "Edge", value: 173, fill: "var(--color-edge)" }, { name: "Other", value: 90, fill: "var(--color-other)" }, ] const config: ChartConfig = { chrome: { label: "Chrome", color: "var(--chart-1)" }, safari: { label: "Safari", color: "var(--chart-2)" }, firefox: { label: "Firefox", color: "var(--chart-3)" }, edge: { label: "Edge", color: "var(--chart-4)" }, other: { label: "Other", color: "var(--chart-5)" }, } export function DonutPieChart() { return ( <ChartContainer config={config} className="h-[350px]"> <PieChart> <ChartTooltip content={ChartTooltipContent} /> <Pie data={data} dataKey="value" nameKey="name" cx="50%" cy="50%" innerRadius={60} outerRadius={120} /> </PieChart> </ChartContainer> ) }
Stacked
Stacked Pie Chart
import { PieChart, Pie, ChartContainer, ChartTooltip, ChartTooltipContent, type ChartConfig } from '@/components/ui/PieChart' const data = [ { name: "Chrome", value: 275, fill: "var(--color-chrome)" }, { name: "Safari", value: 200, fill: "var(--color-safari)" }, { name: "Firefox", value: 187, fill: "var(--color-firefox)" }, { name: "Edge", value: 173, fill: "var(--color-edge)" }, { name: "Other", value: 90, fill: "var(--color-other)" }, ] const config: ChartConfig = { chrome: { label: "Chrome", color: "var(--chart-1)" }, safari: { label: "Safari", color: "var(--chart-2)" }, firefox: { label: "Firefox", color: "var(--chart-3)" }, edge: { label: "Edge", color: "var(--chart-4)" }, other: { label: "Other", color: "var(--chart-5)" }, } export function StackedPieChart() { return ( <ChartContainer config={config} className="h-[350px]"> <PieChart> <ChartTooltip content={ChartTooltipContent} /> <Pie data={data} dataKey="value" nameKey="name" cx="50%" cy="50%" innerRadius={80} outerRadius={120} strokeWidth={4} /> <Pie data={data} dataKey="value" nameKey="name" cx="50%" cy="50%" innerRadius={0} outerRadius={60} strokeWidth={4} /> </PieChart> </ChartContainer> ) }
Donut with Text
Donut Chart with Center Text
import { PieChart, Pie, ChartContainer, ChartTooltip, ChartTooltipContent, type ChartConfig } from '@/components/ui/PieChart' const data = [ { name: "Chrome", value: 275, fill: "var(--color-chrome)" }, { name: "Safari", value: 200, fill: "var(--color-safari)" }, { name: "Firefox", value: 187, fill: "var(--color-firefox)" }, { name: "Edge", value: 173, fill: "var(--color-edge)" }, { name: "Other", value: 90, fill: "var(--color-other)" }, ] const config: ChartConfig = { chrome: { label: "Chrome", color: "var(--chart-1)" }, safari: { label: "Safari", color: "var(--chart-2)" }, firefox: { label: "Firefox", color: "var(--chart-3)" }, edge: { label: "Edge", color: "var(--chart-4)" }, other: { label: "Other", color: "var(--chart-5)" }, } const totalValue = data.reduce((acc, item) => acc + item.value, 0) export function DonutTextPieChart() { return ( <ChartContainer config={config} className="h-[350px]"> <PieChart> <ChartTooltip content={ChartTooltipContent} /> <Pie data={data} dataKey="value" nameKey="name" cx="50%" cy="50%" innerRadius={60} outerRadius={120} /> <text x="50%" y="50%" textAnchor="middle" dominantBaseline="middle" className="fill-foreground text-3xl font-bold" > {totalValue} </text> </PieChart> </ChartContainer> ) }
With Separator
Pie Chart with Separator
import { PieChart, Pie, ChartContainer, ChartTooltip, ChartTooltipContent, type ChartConfig } from '@/components/ui/PieChart' const data = [ { name: "Chrome", value: 275, fill: "var(--color-chrome)" }, { name: "Safari", value: 200, fill: "var(--color-safari)" }, { name: "Firefox", value: 187, fill: "var(--color-firefox)" }, { name: "Edge", value: 173, fill: "var(--color-edge)" }, { name: "Other", value: 90, fill: "var(--color-other)" }, ] const config: ChartConfig = { chrome: { label: "Chrome", color: "var(--chart-1)" }, safari: { label: "Safari", color: "var(--chart-2)" }, firefox: { label: "Firefox", color: "var(--chart-3)" }, edge: { label: "Edge", color: "var(--chart-4)" }, other: { label: "Other", color: "var(--chart-5)" }, } export function SeparatorPieChart() { return ( <ChartContainer config={config} className="h-[350px]"> <PieChart> <ChartTooltip content={ChartTooltipContent} /> <Pie data={data} dataKey="value" nameKey="name" cx="50%" cy="50%" outerRadius={120} paddingAngle={5} /> </PieChart> </ChartContainer> ) }
Props
ChartContainer
| Prop | Type | Default | Description |
|---|---|---|---|
config | ChartConfig | — | Configuration object defining chart colors and labels |
children | ReactNode | — | Chart components to render |
className | string | — | Additional CSS classes |
PieChart
| Prop | Type | Default | Description |
|---|---|---|---|
margin | object | — | Chart margins configuration |
className | string | — | Additional CSS classes |
Pie
| Prop | Type | Default | Description |
|---|---|---|---|
data | any[] | — | Array of data objects to visualize |
dataKey | string | — | Key for accessing values in data objects |
nameKey | string | — | Key for accessing names in data objects |
cx | string | '50%' | X coordinate of pie center |
cy | string | '50%' | Y coordinate of pie center |
innerRadius | number | 0 | Inner radius for donut charts |
outerRadius | number | — | Outer radius of the pie |
paddingAngle | number | 0 | Padding angle between slices |
label | boolean | function | false | Show labels or custom label renderer |
activeIndex | number | — | Index of active slice for interactions |
activeShape | object | — | Custom shape properties for active slice |
ChartTooltipContent
| Prop | Type | Default | Description |
|---|---|---|---|
indicator | 'line' | 'dot' | 'dashed' | 'dot' | Visual indicator style |
hideLabel | boolean | false | Hide the tooltip label |
hideIndicator | boolean | false | Hide the visual indicator |
className | string | — | Additional CSS classes |
Last updated on