Pie Chart Reveal
Use Pie Chart Reveal for distribution; use Chart Bar Growth when category comparison must be more precise.
Use
Revealing a simple distribution where the relative slice sizes matter at a glance.
Avoid
Avoid it when a bar chart would make comparison more accurate.
Safer Alternative
Progress RingRisk Level
High attention
Timing
500-900ms total; each segment should appear quickly enough that the chart does not feel gated.
Easing
Use ease-out for each segment and stagger by 80-160ms.
Risk
Live Demo
What It Is
A pie or donut chart whose segments draw in sequence so users can understand distribution before reading the legend.
Decision Guidance
Use Pie Chart Reveal for distribution; use Chart Bar Growth when category comparison must be more precise.
Best For
Revealing a simple distribution where the relative slice sizes matter at a glance.
Avoid When
Avoid it when a bar chart would make comparison more accurate.
Timing
500-900ms total; each segment should appear quickly enough that the chart does not feel gated.
Easing
Use ease-out for each segment and stagger by 80-160ms.
Risk Tags
Alternatives
✓When to Use
- Small distribution summaries
- Dashboard cards with three to five categories
- Reports where segment proportion is the main takeaway
✕When NOT to Use
- Charts with many tiny slices
- Financial or scientific contexts where exact comparison matters
- Repeated refreshes where animation hides changed values
Configuration Tips
- 01Limit segment count and label the values outside the animation
- 02Animate the largest segment first when hierarchy matters
- 03Use reduced motion to show final segments immediately
You've Seen It In
AI Implementation Prompts
Move from a fast scaffold to production details, then tune timing and edge states.
Create a donut chart card where three segments reveal one after another, with a static legend beside the chart.
Code Example (Tailwind CSS)
A focused implementation sketch you can adapt to your product state.
export function PieChartReveal({ active = true }: { active?: boolean }) {
const segments = [
{ label: 'Team', color: 'stroke-amber-500', value: 42, offset: 0 },
{ label: 'Self serve', color: 'stroke-stone-900', value: 34, offset: -42 },
{ label: 'Partner', color: 'stroke-stone-300', value: 24, offset: -76 },
];
return (
<div className="flex items-center gap-5 rounded-2xl border border-stone-200 bg-white p-5">
<svg viewBox="0 0 120 120" className="h-28 w-28 -rotate-90" aria-label="Customer mix donut chart">
{segments.map((segment, index) => (
<circle key={segment.label} cx="60" cy="60" r="42" fill="none" strokeWidth="18" strokeDasharray={`${segment.value} 100`} strokeDashoffset={segment.offset} className={`${segment.color} transition-opacity duration-500 ${active ? 'opacity-100' : 'opacity-20'}`} style={{ transitionDelay: `${index * 120}ms` }} />
))}
</svg>
<div className="space-y-2 text-sm text-stone-600">
{segments.map((segment) => <div key={segment.label}>{segment.label}: {segment.value}%</div>)}
</div>
</div>
);
}Related Effects
Progress Ring
A circular SVG ring that visually fills its stroke perimeter based on a percentage value, moving smoothly as progress updates.
Chart Bar Growth
Bar charts that animate from a height of zero up to their final data value upon entering the screen, making the data feel impactful.
Data Tweening
When filtering or changing datasets, SVG lines or pie slices seamlessly morph from one shape to the next instead of snapping instantly.