Sports Data Visualization
Ten chart types, each built on real sports data, ending with the styling pass that makes a figure publishable.
Charts are how analysis gets believed. This course works through the chart types that cover almost every sports-data situation — bars, part-to-whole, shaded ranges, dual axes, small multiples, heatmaps, bump charts — one honest build at a time, each from data you can inspect.
The order matters less here than elsewhere: the first five are independent of each other. But save the last step for last — it's the difference between a chart that works and a chart you'd put your name on.
What you'll be able to do
- Pick the right chart form for a comparison, a trend, or a distribution
- Build hexbin shot heatmaps and correlation matrices that stay readable
- Track rank over time with a bump chart
- Apply a deliberate styling pass: fonts, grids, labels, source lines
The bundle contains each part's finished script, the shared helpers, and the sample data they read, with a README listing the run order - the whole course works offline.
The syllabus
Pace: The first five parts are independent - take one whenever you have an hour. Give the last three consecutive evenings.
0 of 10 parts marked complete on this device.
Every part of this course is marked complete on this device. The capstone below is the victory lap - and the quiz will tell you if anything slipped.
- Stacked Bar Charts: Win-Loss CompositionPart plus whole in one mark - the simplest honest composition chart.
- Grouped Bar Charts: Compare Two Metrics Side by SideSide-by-side comparison is the bread and butter of sports charts.
- Pie and Donut Charts: Showing Part-to-Whole (and When Not To)Part-to-whole done carefully - including when a pie is the wrong call.
- fill_between: Shade Above and Below a BaselineShaded bands say 'range' better than any pair of lines.
- Dual-Axis Charts: Plot Two Scales with twinx()Two units, one timeline - and the honesty rules dual axes demand.
- Small Multiples: Compare Every Team at Once with SubplotsOne small chart per team beats one giant unreadable one.
- A Correlation Heatmap: Which Team Stats Move TogetherEvery pairwise relationship at a glance, before you model anything.
- Make a Shot-Density Heatmap with hexbinDensity beats scatter once you have thousands of points.
- A Standings Bump Chart: Visualizing a Season's TwistsRank over time is its own chart form; bump charts read like a story.
- Publication-Ready Charts: matplotlib Styling and AnnotationsThe final pass - typography, grids, labels, source lines - that makes a chart yours.
Check yourself
Five questions, graded on the page, nothing recorded anywhere - pick an answer and the explanation appears.
1. Your reader needs to compare eight teams' totals. The best default form is…
Position along a common scale is the easiest visual judgment we make - bars win for comparisons. Angle and area (pies) are much harder to read precisely.
2. When is a dual-axis chart defensible?
Dual axes invite fake correlation by rescaling - they earn their place only when the cross-unit relationship is the point and the labeling is unmissable.
3. You have 10,000 shot locations and a scatter plot is a smear. Reach for…
Density binning (hexbin) shows where the mass is; more or bigger dots just deepen the smear.
4. Small multiples work because…
The shared scale is the trick: your eye compares positions across panels without re-reading axes.
5. A correlation heatmap shows…
Each cell is a correlation coefficient - linear association only. Causation and time live in other charts.
Where next: Statistics for Sports Data · Basketball Analytics with the NBA API.