Build a Player Radar (Pizza) Chart in Python with mplsoccer
A radar (pizza) chart turns a player's percentile profile into one glance. Build one in Python with mplsoccer's PyPizza, from a handful of per-90 metrics.
Category · 8 articles
Pull the data and draw the charts yourself.
Reading analysis is one thing; producing it is another. These tutorials take you from a blank file to a real pass map, shot map or xG table, using free public data and free open-source tools — mostly Python with statsbombpy and mplsoccer, with a spreadsheet option for those who'd rather not write code.
Every code block is real and runnable. Copy it, change the team, and you're doing your own analysis by the end of the afternoon.
A radar (pizza) chart turns a player's percentile profile into one glance. Build one in Python with mplsoccer's PyPizza, from a handful of per-90 metrics.
A league table rewards results; an xG table rewards process. Turn each match's xG into expected points in Python to see who's over- or under-achieving.
Goals in football are close to random — but not quite. Build a simple Poisson model in Python to turn team attack and defence strengths into scoreline probabilities.
A league table hides whether a team is improving or living on borrowed time. Build a rolling expected-goals form chart in Python to see the real trend.
A hands-on, copy-pasteable tutorial — load a real match with statsbombpy and draw a pass map and an xG-sized shot map with mplsoccer, using the 2022 World Cup final.
A beginner-friendly tutorial: install statsbombpy, understand the competitions-matches-events data model, and build a top-xG leaderboard in Python.
A practical, ranked guide to the free public soccer data sources worth your time — StatsBomb open data, Understat, FBref and more — and the catch with each.
A no-code tutorial: build an expected-goal-difference (xGD) league table in a spreadsheet from Understat data, and spot who is over- or under-performing.