LeBron James Career Scoring

LeBron's Career Scoring as a Waterfall Chart

Charting LeBron

LeBron James passed Michael Jordan tonight on the NBA’s all time points scored leaderboard, surpassing MJ’s 32,292 career points to vault him into 4th place. While this season has largely been one to forget for the Lakers, LeBron’s pursuit of Kareem Abdul-Jabbar and the possible arrival of Anthony Davis or a second star guarantee that there will be lots of excitement in LA for the next few seasons.

Reflecting briefly on LeBron’s incredible career to date - his year-to-year consistency, which to this point has been unique for any basketball player, ever, truly stands out in its metronomic consistency. Until this season with the Lakers, where he missed time with a groin injury, James has pretty much put up ~ 2,000 points a year, regardless of team, surrounding cast, or circumstance.

LeBron's Career Scoring Mix

As he’s aged, LeBron has also changed how he scores his points. His points scored at the free throw line has declined as he creates a bit less contact in an effort to protect his body, and his points scored behind the three point line has more than double since his rookie year in the league.

Creating a Waterfall Chart of Career Points Scored

If you’re looking to create a waterfall chart of your own that’s similar to this one, feel free to steal from the code below. To make the chart with inset view of scoring per season, we just need to make the two charts separately, and then use cowplot to overlay the bar chart inside a blank space on the waterfall chart.

# Create a color palette for each team
pal <- c(LAL = "#FDB927", CLE = "#6F263D", MIA ="#000000")

# Create the waterfall plot to show yearly points scored towards total
waterfall <- ggplot(stats, aes(x = Season, y = PTS, fill = Tm, label = PTS)) + 
  geom_rect(aes(x = Season, xmin = id - 0.5, xmax = id + 0.5, ymin = Last_PTS, ymax = Total_PTS)) +		# Plot each season's points scored 
  geom_text(aes(y = Total_PTS + 600), size = 2) +	# Add labels for that season's points above each bar
  scale_fill_manual("Team", values = pal) +			# Use the team colors in the chart, link to fill
  scale_y_continuous(labels = scales::comma) +
  theme_minimal() +
  theme(
    axis.text.x = element_text(angle = 90, hjust = 1),		# Rotate x axis labels
  )

# Create a very simple bar chart of points per year
inset <- ggplot(stats, aes(x = Season, y = PTS, fill = Tm, label = PTS)) + 
  geom_col() +
  scale_fill_manual(values = pal, guide = FALSE) +		# Use team colors in chart
  scale_y_continuous(labels = scales::comma) +
  theme_minimal() +
  labs(x = "Points per Season", y = "") +
  theme(
    axis.title.y = element_blank(), 		# Hide un-needed ticks and grid lines
    axis.text.y = element_blank(),
    axis.ticks.y = element_blank(),
    panel.grid.major = element_blank(), 
    panel.grid.minor = element_blank()
  )


 # Load the Cowplot library needed to create ggplot grid graphics and more
 library(cowplot)

 ggdraw() +
  draw_plot(waterfall) +		# Make the waterfall plot the main plot
  draw_plot(inset, x = 0.12, y = .624, width = .2, height = .2)			# Add the bar chat as an inset in the top left of the waterfall chart