Component Library
Browse and explore components
Radial chart
A Radial Chart is a circular data visualization that represents values as segments or arcs around a central point. It’s useful for comparing proportions, showing progress, or highlighting patterns in cyclical or categorical data.
Default
Component Code
Copy Code
'use client'
import { RadialBar, RadialBarChart } from 'recharts'
import {
ChartConfig,
ChartContainer,
ChartTooltip,
ChartTooltipContent,
} from '@/components/ui/chart'
export const description = 'A radial chart'
const chartData = [
{ browser: 'chrome', visitors: 275, fill: 'var(--color-primary)' },
{ browser: 'safari', visitors: 200, fill: 'var(--color-secondary)' },
{ browser: 'firefox', visitors: 187, fill: 'var(--color-warning)' },
{ browser: 'edge', visitors: 173, fill: 'var(--color-error)' },
{ browser: 'other', visitors: 90, fill: 'var(--color-info)' },
]
const chartConfig = {
visitors: {
label: 'Visitors',
},
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)',
},
} satisfies ChartConfig
export default function ChartRadialSimpleCode() {
return (
<>
<ChartContainer config={chartConfig}>
<RadialBarChart data={chartData} innerRadius={30} outerRadius={110}>
<ChartTooltip
cursor={false}
content={<ChartTooltipContent hideLabel nameKey='browser' />}
/>
<RadialBar dataKey='visitors' background />
</RadialBarChart>
</ChartContainer>
</>
)
}
Label
Component Code
Copy Code
'use client'
import { LabelList, RadialBar, RadialBarChart } from 'recharts'
import {
ChartConfig,
ChartContainer,
ChartTooltip,
ChartTooltipContent,
} from '@/components/ui/chart'
export const description = 'A radial chart with a label'
const chartData = [
{ browser: 'chrome', visitors: 275, fill: 'var(--color-primary)' },
{ browser: 'safari', visitors: 200, fill: 'var(--color-secondary)' },
{ browser: 'firefox', visitors: 187, fill: 'var(--color-warning)' },
{ browser: 'edge', visitors: 173, fill: 'var(--color-error)' },
{ browser: 'other', visitors: 90, fill: 'var(--color-info)' },
]
const chartConfig = {
visitors: {
label: 'Visitors',
},
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)',
},
} satisfies ChartConfig
export default function ChartRadialLabelCode() {
return (
<>
<ChartContainer config={chartConfig}>
<RadialBarChart
data={chartData}
startAngle={-90}
endAngle={380}
innerRadius={30}
outerRadius={110}>
<ChartTooltip
cursor={false}
content={<ChartTooltipContent hideLabel nameKey='browser' />}
/>
<RadialBar dataKey='visitors' background>
<LabelList
position='insideStart'
dataKey='browser'
className='fill-white capitalize mix-blend-luminosity'
fontSize={11}
/>
</RadialBar>
</RadialBarChart>
</ChartContainer>
</>
)
}
Grid
Component Code
Copy Code
'use client'
import { PolarGrid, RadialBar, RadialBarChart } from 'recharts'
import {
ChartConfig,
ChartContainer,
ChartTooltip,
ChartTooltipContent,
} from '@/components/ui/chart'
export const description = 'A radial chart with a grid'
const chartData = [
{ browser: 'chrome', visitors: 275, fill: 'var(--color-primary)' },
{ browser: 'safari', visitors: 200, fill: 'var(--color-secondary)' },
{ browser: 'firefox', visitors: 187, fill: 'var(--color-warning)' },
{ browser: 'edge', visitors: 173, fill: 'var(--color-error)' },
{ browser: 'other', visitors: 90, fill: 'var(--color-info)' },
]
const chartConfig = {
visitors: {
label: 'Visitors',
},
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)',
},
} satisfies ChartConfig
export default function ChartRadialGridCode() {
return (
<>
<ChartContainer config={chartConfig}>
<RadialBarChart data={chartData} innerRadius={30} outerRadius={100}>
<ChartTooltip
cursor={false}
content={<ChartTooltipContent hideLabel nameKey='browser' />}
/>
<PolarGrid gridType='circle' />
<RadialBar dataKey='visitors' />
</RadialBarChart>
</ChartContainer>
</>
)
}
Text
Component Code
Copy Code
'use client'
import {
Label,
PolarGrid,
PolarRadiusAxis,
RadialBar,
RadialBarChart,
} from 'recharts'
import { ChartConfig, ChartContainer } from '@/components/ui/chart'
export const description = 'A radial chart with text'
const chartData = [
{ browser: 'safari', visitors: 200, fill: 'var(--color-primary)' },
]
const chartConfig = {
visitors: {
label: 'Visitors',
},
safari: {
label: 'Safari',
color: 'var(--chart-2)',
},
} satisfies ChartConfig
export default function ChartRadialText() {
return (
<>
<ChartContainer config={chartConfig}>
<RadialBarChart
data={chartData}
startAngle={0}
endAngle={250}
innerRadius={80}
outerRadius={110}>
<PolarGrid
gridType='circle'
radialLines={false}
stroke='none'
className='first:fill-muted last:fill-lightprimary dark:last:fill-lightprimary'
polarRadius={[86, 74]}
/>
<RadialBar dataKey='visitors' background cornerRadius={10} />
<PolarRadiusAxis tick={false} tickLine={false} axisLine={false}>
<Label
content={({ viewBox }) => {
if (viewBox && 'cx' in viewBox && 'cy' in viewBox) {
return (
<text
x={viewBox.cx}
y={viewBox.cy}
textAnchor='middle'
dominantBaseline='middle'>
<tspan
x={viewBox.cx}
y={viewBox.cy}
className='fill-foreground text-4xl font-bold'>
{chartData[0].visitors.toLocaleString()}
</tspan>
<tspan
x={viewBox.cx}
y={(viewBox.cy || 0) + 24}
className='fill-muted-foreground'>
Visitors
</tspan>
</text>
)
}
}}
/>
</PolarRadiusAxis>
</RadialBarChart>
</ChartContainer>
</>
)
}
Shape
Component Code
Copy Code
'use client'
import {
Label,
PolarGrid,
PolarRadiusAxis,
RadialBar,
RadialBarChart,
} from 'recharts'
import { ChartConfig, ChartContainer } from '@/components/ui/chart'
export const description = 'A radial chart with a custom shape'
const chartData = [
{ browser: 'safari', visitors: 1260, fill: 'var(--color-secondary)' },
]
const chartConfig = {
visitors: {
label: 'Visitors',
},
safari: {
label: 'Safari',
color: 'var(--chart-2)',
},
} satisfies ChartConfig
export default function ChartRadialShapeCode() {
return (
<>
<ChartContainer config={chartConfig}>
<RadialBarChart
data={chartData}
endAngle={100}
innerRadius={80}
outerRadius={140}>
<PolarGrid
gridType='circle'
radialLines={false}
stroke='none'
className='first:fill-muted last:fill-lightsecondary dark:last:fill-lightsecondary'
polarRadius={[86, 74]}
/>
<RadialBar dataKey='visitors' background />
<PolarRadiusAxis tick={false} tickLine={false} axisLine={false}>
<Label
content={({ viewBox }) => {
if (viewBox && 'cx' in viewBox && 'cy' in viewBox) {
return (
<text
x={viewBox.cx}
y={viewBox.cy}
textAnchor='middle'
dominantBaseline='middle'>
<tspan
x={viewBox.cx}
y={viewBox.cy}
className='fill-foreground text-4xl font-bold'>
{chartData[0].visitors.toLocaleString()}
</tspan>
<tspan
x={viewBox.cx}
y={(viewBox.cy || 0) + 24}
className='fill-muted-foreground'>
Visitors
</tspan>
</text>
)
}
}}
/>
</PolarRadiusAxis>
</RadialBarChart>
</ChartContainer>
</>
)
}
Stacked
Component Code
Copy Code
'use client'
import { Label, PolarRadiusAxis, RadialBar, RadialBarChart } from 'recharts'
import {
ChartConfig,
ChartContainer,
ChartTooltip,
ChartTooltipContent,
} from '@/components/ui/chart'
export const description = 'A radial chart with stacked sections'
const chartData = [{ month: 'january', desktop: 1260, mobile: 570 }]
const chartConfig = {
desktop: {
label: 'Desktop',
color: 'var(--chart-1)',
},
mobile: {
label: 'Mobile',
color: 'var(--chart-2)',
},
} satisfies ChartConfig
export default function ChartRadialStackedCode() {
const totalVisitors = chartData[0].desktop + chartData[0].mobile
return (
<>
<ChartContainer config={chartConfig}>
<RadialBarChart
data={chartData}
endAngle={180}
innerRadius={80}
outerRadius={130}>
<ChartTooltip
cursor={false}
content={<ChartTooltipContent hideLabel />}
/>
<PolarRadiusAxis tick={false} tickLine={false} axisLine={false}>
<Label
content={({ viewBox }) => {
if (viewBox && 'cx' in viewBox && 'cy' in viewBox) {
return (
<text x={viewBox.cx} y={viewBox.cy} textAnchor='middle'>
<tspan
x={viewBox.cx}
y={(viewBox.cy || 0) - 16}
className='fill-foreground text-2xl font-bold'>
{totalVisitors.toLocaleString()}
</tspan>
<tspan
x={viewBox.cx}
y={(viewBox.cy || 0) + 4}
className='fill-muted-foreground'>
Visitors
</tspan>
</text>
)
}
}}
/>
</PolarRadiusAxis>
<RadialBar
dataKey='desktop'
stackId='a'
cornerRadius={5}
fill='var(--color-primary)'
className='stroke-transparent stroke-2'
/>
<RadialBar
dataKey='mobile'
fill='var(--color-secondary)'
stackId='a'
cornerRadius={5}
className='stroke-transparent stroke-2'
/>
</RadialBarChart>
</ChartContainer>
</>
)
}