What Is a Bar Chart Race?
A bar chart race is an animated horizontal bar chart that shows how rankings change over time. The bars dynamically grow, shrink, and reorder as they compete for position, creating a compelling visual narrative that makes temporal data instantly engaging.
You have likely seen bar chart races showing GDP rankings, population growth, or YouTube subscriber counts. Their viral appeal comes from gamifying data—viewers naturally root for their favorite bar to climb the rankings.
Best Tools for Creating Bar Chart Races
Here are the three most popular approaches, ranked by ease of use:
| Tool | Skill Level | Cost | Best For |
|---|---|---|---|
| Flourish | Beginner | Free (with watermark) | Quick creation, no coding |
| Python (bar_chart_race) | Intermediate | Free | Custom styling, automation |
| Excel + PowerPoint | Advanced | Microsoft 365 | Corporate environments |
Method 1: Flourish (Easiest)
Flourish is the fastest way to create a professional bar chart race with zero coding.
Step 1: Prepare Your Data
Format your spreadsheet with:
- Column A: Category names (countries, companies, etc.)
- Columns B onward: Time periods as headers (2010, 2011, 2012…)
- Values: Numeric data for each category at each time point
Step 2: Create in Flourish
- Go to flourish.studio and sign up (free)
- Click New visualization → search Bar chart race
- Select the template and click Create visualization
- In the Data tab, paste or upload your spreadsheet
- Map your columns: Label, Values, and optionally Image/Color
Step 3: Customize
- Preview tab: Adjust animation speed, number of bars shown, and timing
- Colors: Set custom colors per category or use a palette
- Labels: Format numbers (currency, percentages, abbreviations)
Step 4: Export
Click Export & publish. Free accounts get an embed link. Paid plans ($69/month) allow MP4 video download without watermark.
Method 2: Python (Most Flexible)
For custom styling or batch processing, use the bar_chart_race Python library.
Installation
pip install bar_chart_race pandas
Basic Example
import bar_chart_race as bcr
import pandas as pd
# Load your data (rows = time periods, columns = categories)
df = pd.read_csv("your_data.csv", index_col=0)
# Create the animation
bcr.bar_chart_race(
df=df,
filename="race.mp4",
title="My Bar Chart Race",
n_bars=10,
period_length=500,
steps_per_period=20,
figsize=(6, 3.5),
cmap="dark12"
)
Key Parameters
n_bars: Number of bars visible at once (default: 10)period_length: Milliseconds per time period (default: 500)steps_per_period: Animation smoothness (default: 10)cmap: Color palette (dark12,tab20, or custom dict)period_fmt: Format the time label (e.g.,"{x:.0f}")
Advanced: Custom Colors and Images
# Custom colors per category
colors = {
"USA": "#3C3B6E",
"China": "#DE2910",
"Japan": "#BC002D"
}
bcr.bar_chart_race(
df=df,
filename="race.mp4",
colors=colors,
bar_label_size=7,
tick_label_size=7,
period_label={"x": 0.95, "y": 0.15, "ha": "right", "size": 24}
)
Method 3: Excel + PowerPoint (Manual)
This method works without additional software but requires manual animation setup.
Step 1: Create a Sorted Bar Chart in Excel
- Create a horizontal bar chart for your first time period
- Sort data descending by value
- Remove gridlines and simplify styling
Step 2: Duplicate for Each Time Period
- Create a separate chart for each time period
- Re-sort bars by the new values
- Copy each chart into PowerPoint as a separate slide
Step 3: Animate with Morph Transitions
- In PowerPoint, select all slides
- Go to Transitions → Morph
- Set duration to 0.5-1 second per slide
- Export as video: File → Export → Create a Video
Limitations: This method is time-consuming for many time periods and does not produce as smooth animations as Flourish or Python.
Design Tips for Engaging Bar Chart Races
1. Limit Visible Bars
Show 8-12 bars maximum. Too many bars create visual clutter and reduce impact.
2. Use Meaningful Colors
Assign consistent colors that viewers associate with each category:
- Countries → Flag colors
- Brands → Brand colors
- Political data → Party colors
3. Add Context
- Include a large, visible year/date counter
- Add a title that explains what is being measured
- Consider annotations for major events
4. Optimize Timing
- Social media: 30-60 seconds total, faster transitions
- Presentations: 1-2 minutes, slower for audience to follow
- Pause at key moments: Add holds when rankings dramatically shift
5. Add Audio (Optional)
Background music or voiceover narration significantly increases engagement. Export video then add audio in a video editor.
When to Use Bar Chart Races
Great Use Cases
- Rankings over time: Market share, population, revenue
- Competition narratives: Sports stats, brand battles
- Historical trends: Showing decades of change in seconds
- Social media content: Highly shareable and engaging
When to Avoid
- Stable data: If rankings rarely change, the animation is boring
- Too few time periods: Need at least 5-10 data points for smooth animation
- Precise analysis: Static charts are better for detailed comparisons
- Print/PDF: Animation cannot be reproduced in static formats
Conclusion
Bar chart races transform boring spreadsheets into viral-worthy content. For most people, Flourish offers the best balance of ease and quality. Developers and data scientists should explore Python for full customization. The Excel method works in a pinch but is not recommended for complex projects.
Ready to create stunning animated data visualizations? Contact Significant Figures for professional bar chart race production with custom branding, voiceover, and platform-optimized exports.