To make a bar chart race video, put your data in a table with one row per item and one column per period, then animate horizontal bars that grow and re-sort each period. Show the top 5 to 10, keep one colour per item, add a running date counter, and hold the final ranking for three seconds.
Real outputs from the Videotto template gallery.
When a bar chart race is the right chart
A race is ranking plus time. Every frame is a sorted bar chart, and the motion between frames is the drama. That only works if the ranking actually changes.
- Use a race when several items compete over time and the lead changes at least once: countries by output over decades, brands by market share, players by career points.
- Use a line chart when one or two values change over time. A race with one bar is just a bar growing.
- Use a top 10 countdown when the ranking is fixed and you want to reveal it one entry at a time.
- Use a single counter when there is one number that matters.
The best race topics have a familiar cast and a surprise: people know the names but not how the order changed. Your own data works too. Sales per product or views per video make a strong post for a business page.
Preparing bar chart race data in five steps
The data is most of the work. A clean table gives a clean race.
- One row per item, one column per period. Each row is one bar. Periods (years, months, seasons) run left to right in order.
- Use the same unit everywhere. All values in millions, or all in percent. Note the unit once, in the title or the axis.
- Decide what to do with gaps. Carry the last value forward, or start the bar later. Say which, because a bar dropping to zero looks like a collapse.
- Choose how many bars to show. Top 10 is the classic for 16:9. Top 5 to 8 reads better on a 1080x1920 phone screen.
- Set the pace. About one to two seconds per period. Twenty years at 1.5 seconds each is 30 seconds, plus a few seconds of title and a final hold.
Bar chart race tools: Flourish, Python and Otto
Three routes come up most when people search for this. Times are typical estimates for a 20 period race once the data is clean, not measured results.
| Route | How it works | Watch out for | Typical time |
|---|---|---|---|
| Flourish | Bar chart race template, paste data in a sheet, style in the browser | Built for web embeds, so getting a vertical video file often means screen recording | 30 to 60 minutes |
| Python (bar_chart_race with matplotlib) | A few lines of code render an MP4 through ffmpeg | Expects one row per date and one column per item, the transposed layout. Styling is code | 1 to 3 hours the first time |
| After Effects | Hand animated bars or a data driven script | Most control, most effort | A day or more |
| Otto | Paste the table in a prompt and describe the race | Check every value on the final frame | One prompt, then a few minutes of follow ups |
If you already work in Python, the library route is free and repeatable for many races. If you want a phone ready video with music, a title and pacing that slows at the big overtake, describing it is usually faster than coding it.
Bar chart race prompt to paste into Otto
Adapted from real requests Videotto users sent to Otto. Paste your table where the placeholders are.
Make a bar chart race video, vertical 9:16, about 40 seconds. Data (one row per item, one column per year): [item], [year 1 value], [year 2 value], [year 3 value] [item], [year 1 value], [year 2 value], [year 3 value] Show the top 8 bars, sorted, largest at the top. Each item keeps one colour. Name on the left of each bar, value counting at the end. A large running year in the corner. Bars glide smoothly when they overtake. Ease the pace when the leader changes. Title at the top: [your title]. Steady background music, soft tick on each new year. Hold the final ranking for three seconds. Keep every number exactly as given.
Short bar chart race requests
- "Turn this spreadsheet into a bar chart race, top 10, one second per year."
- "Use flags as icons at the end of each bar."
- "Dark background, bright bars, big year counter."
- "Slow down when the leader changes, then speed back up."
Worked example: a 35 second streaming race
An illustration with made up items, not real market data. Six fictional streaming apps, subscribers from 2012 to 2025, 14 periods.
| Time | What happens | Pacing |
|---|---|---|
| 0:00 to 0:03 | Title: Which app had the most subscribers? | Static, music starts |
| 0:03 to 0:12 | 2012 to 2016, App A leads comfortably | 1.8 seconds per year |
| 0:12 to 0:20 | 2017 to 2019, App C climbs from fifth to second | Same pace |
| 0:20 to 0:25 | 2020, App C overtakes App A | Slows to 3 seconds, note: "launches in 40 markets" |
| 0:25 to 0:31 | 2021 to 2025, App F enters late and reaches third | 1.2 seconds per year |
| 0:31 to 0:35 | Final ranking and source line | Hold |
The one overtake is the reason to watch, so the pace eases around it and a short note explains the jump. The late entrant gives a second, smaller surprise. Six bars keep every label readable at 1080x1920.
Checklist before you post a chart race
- Every item keeps the same colour all the way through.
- No more than 10 bars, or 8 on vertical.
- Units match, and the unit is shown once.
- The leader changes at least once.
- The year counter is large enough to read at a glance.
- The final ranking holds for at least three seconds.
- A source line appears at the end, especially for public data.
- Logos and flags are images you have the right to use.
FAQ
How do I make a bar chart race in Excel?
Excel has no built in bar chart race, but you can fake one with a sorted bar chart driven by a slider or a macro that steps through the periods while you screen record. It works for a quick test. For a smooth race with bars gliding past each other, most people move to Flourish, the Python bar_chart_race library or a video editor.
How do I make a bar chart race in Python?
To make a bar chart race in Python, install the bar_chart_race package, which builds on matplotlib, and ffmpeg for video output. Load your data into a pandas DataFrame with one row per date and one column per item, then call the bar_chart_race function with a filename ending in .mp4. Options control bar count, period length and colours.
Is Flourish free for bar chart races?
Flourish has a free plan that includes its bar chart race template, but visualisations made on the free plan are published publicly. Paid plans add private projects and more export options. Check the current plan details on the Flourish site before you rely on it for client or confidential data, since plan features change over time.
How long should a bar chart race video be?
A bar chart race video for social media usually runs 30 to 60 seconds, at about one to two seconds per period. Longer histories can move faster through quiet years and slow down when the lead changes. On YouTube, races of a few minutes do well when the time span is long and the ranking keeps shifting.
Why are bar chart race videos so popular?
Bar chart race videos are popular because they turn a dataset into a contest with a winner. Viewers recognise the names, pick a favourite and stay to see if it wins. The constant overtaking creates small moments of tension, and the final ranking is easy to screenshot and argue about in the comments.
Make your next video with Otto
Tell Otto what you want in plain words. It cuts, captions and animates the video for you.




