Jake Benhart › Shot Maps

Shot Maps

Where the NBA's leading scorers took their shots, and how well they made them compared with the rest of the league from the same spot. One page per season, the 20 leading scorers by points per game on each, from 2003-04 to 2024-25. Each scorer's card links to his other top-20 seasons and to his own page, which puts his map for every one of those seasons together; the players page lists them all. To put any two player-seasons side by side, from the same season or different ones, use Compare two players.

SeasonScoring leaderPoints per gameQualified if he
2024-25Shai Gilgeous-Alexander32.7played at least 58 games
2023-24Luka Dončić33.9played at least 58 games
2022-23Joel Embiid33.1played at least 58 games
2021-22Joel Embiid30.6played at least 58 games
2020-21Stephen Curry32.0played at least 51 games
2018-19James Harden36.1played at least 58 games
2017-18James Harden30.4played at least 58 games
2016-17Russell Westbrook31.6played at least 58 games
2015-16Stephen Curry30.1played at least 58 games
2014-15Russell Westbrook28.1played at least 58 games
2013-14Kevin Durant32.0played at least 58 games
2012-13Carmelo Anthony28.7played at least 70 games or scored at least 1,400 points
2011-12Kevin Durant28.0played at least 56 games or scored at least 1,127 points
2010-11Kevin Durant27.7played at least 70 games or scored at least 1,400 points
2009-10Kevin Durant30.1played at least 70 games or scored at least 1,400 points
2008-09Dwyane Wade30.2played at least 70 games or scored at least 1,400 points
2007-08LeBron James30.0played at least 70 games or scored at least 1,400 points
2006-07Kobe Bryant31.6played at least 70 games or scored at least 1,400 points
2005-06Kobe Bryant35.4played at least 70 games or scored at least 1,400 points
2004-05Allen Iverson30.7played at least 70 games or scored at least 1,400 points
2003-04Tracy McGrady28.0played at least 70 games or scored at least 1,400 points

How to read a map

The half court is cut into hexagons 3 feet across, with one centered on the rim. For each player and hexagon: size shows how many shots he took there; color is his field-goal percentage there minus the league's from the same hexagon that season, with his own shots counted in the league. Orange is better than the league, blue is worse, and the scale stops at 15 percentage points either way. A hexagon where he took fewer than 10 shots is drawn as a gray outline and not colored, because a handful of shots says more about luck than skill. Hover a hexagon for its numbers; on a phone, tap it and they appear under the map.

Each season page has two views. 3 ft hexagons, 10-shot floor colors each hexagon from his own shots there. Pooled with the 6 around it colors each hexagon from it and its six neighbours together, still needing 10 shots, so more of the court gets a color and each color is smoother. Both come from the same table and the same checks. In the pooled view a hexagon's color comes from it and the six around it, but its size is still his own attempts in that one hexagon, so a small hexagon can carry a strong color its neighbours earned. Hover or tap it to see how many shots the color rests on.

The orange-to-blue scale was checked for the three common kinds of color blindness (protanomaly, deuteranomaly, tritanomaly) with Machado, Oliveira and Fernandes' published simulation: above and below the league stay clearly apart for all three.

Shot types

Each card lists the shot types NBA.com recorded for the player (jump shot, driving layup, dunk and so on), with his field-goal percentage on each and the league's on the same type. A type with fewer than 10 attempts is listed but not compared. The made-dunk count is checked against Basketball-Reference's for every player.

NBA.com's labels are not the same in every season. It used fewer, broader labels early on, so "Jump Shot" covers far more of the league's attempts in the early seasons than in recent ones. Compare shot types within a season, not across seasons:

SeasonLabels used"Jump Shot" share of league attempts
2003-042960.2%
2004-052959.6%
2005-062958.8%
2006-072958.4%
2007-085057.4%
2008-094955.3%
2009-104953.5%
2010-115055.7%
2011-125054.8%
2012-135053.5%
2013-145053.2%
2014-154952.8%
2015-165347.5%
2016-175346.1%
2017-184639.5%
2018-194635.3%
2020-214634.1%
2021-224632.7%
2022-234829.4%
2023-244828.9%
2024-254828.7%

Advanced stats

Each player card also carries his season's advanced stats from Basketball-Reference: eFG%, TS%, PER, usage, Win Shares, WS/48, BPM and VORP on the card, and the rest (rebound, assist, steal, block and turnover rates, the offensive and defensive splits) under "All advanced stats". They come in three kinds, and the pages say which is which:

Definitions, from the column headers of Basketball-Reference's pages:

eFG%: Effective Field Goal Percentage
This statistic adjusts for the fact that a 3-point field goal is worth one more point than a 2-point field goal.
TS%: True Shooting Percentage
A measure of shooting efficiency that takes into account 2-point field goals, 3-point field goals, and free throws.
PER: Player Efficiency Rating
A measure of per-minute production standardized such that the league average is 15.
USG%: Usage Percentage
An estimate of the percentage of team plays used by a player while they were on the floor.
WS: Win Shares
An estimate of the number of wins contributed by a player.
WS/48: Win Shares Per 48 Minutes
An estimate of the number of wins contributed by a player per 48 minutes (league average is approximately .100)
BPM: Box Plus/Minus
A box score estimate of the points per 100 possessions a player contributed above a league-average player, translated to an average team.
VORP: Value over Replacement Player
A box score estimate of the points per 100 TEAM possessions that a player contributed above a replacement-level (-2.0) player, translated to an average team and prorated to an 82-game season. Multiply by 2.70 to convert to wins over replacement.
3PAr: 3-Point Attempt Rate
Percentage of FG Attempts from 3-Point Range
FTr: Free Throw Attempt Rate
Number of FT Attempts Per FG Attempt
ORB%: Offensive Rebound Percentage
An estimate of the percentage of available offensive rebounds a player grabbed while they were on the floor.
DRB%: Defensive Rebound Percentage
An estimate of the percentage of available defensive rebounds a player grabbed while they were on the floor.
TRB%: Total Rebound Percentage
An estimate of the percentage of available rebounds a player grabbed while they were on the floor.
AST%: Assist Percentage
An estimate of the percentage of teammate field goals a player assisted while they were on the floor.
STL%: Steal Percentage
An estimate of the percentage of opponent possessions that end with a steal by the player while they were on the floor.
BLK%: Block Percentage
An estimate of the percentage of opponent two-point field goal attempts blocked by the player while they were on the floor.
TOV%: Turnover Percentage
An estimate of turnovers committed per 100 plays.
OWS: Offensive Win Shares
An estimate of the number of wins contributed by a player due to offense.
DWS: Defensive Win Shares
An estimate of the number of wins contributed by a player due to defense.
OBPM: Offensive Box Plus/Minus
A box score estimate of the offensive points per 100 possessions a player contributed above a league-average player, translated to an average team.
DBPM: Defensive Box Plus/Minus
A box score estimate of the defensive points per 100 possessions a player contributed above a league-average player, translated to an average team.

Where the numbers come from

Shot locations and shot types are NBA.com's shot logs as collected in the DomSamangy/NBA_Shots_04_25 repository. Points per game, games played, the advanced stats, dunk counts and the cross-checks come from Basketball-Reference, a Sports Reference LLC site. The qualifying rule is quoted from NBA.com's statistical minimums, Basketball-Reference's rate statistic requirements (for the seasons before 2013-14, when a player also qualified by points) and Wikipedia's list of scoring leaders. Each season page lists its files with download dates and sha256 fingerprints, and every check it passed.

Not shown