liveBook · Manning

Dot plot

As explained in Statistics Slam Dunk

A Cleveland dot plot compares values by positioning dots along a common quantitative scale.

A dot plot places values on a shared quantitative scale so comparisons are easier to see than in a table. For NBA payroll analysis, one form ranks each team by payroll and colors its dot by season-ending result; a Cleveland dot plot places two standardized measures for each team on the same scale and joins them with a line. section 10.4 section 11.4

Build a ranked payroll dot plot by:

  • Create a temporary data set containing team names, one season’s payroll column, and the season-ending classification; omit missing values before plotting. section 10.4.2
  • Map payroll to the x-axis and reorder team names by payroll on the y-axis, producing a descending team ranking. section 10.4.2
  • Map the three outcome categories—no playoffs, made playoffs, and won title—to dot colors, then place the legend beneath the chart. section 10.4.2
  • Format payroll labels as abbreviated dollar amounts and rotate them for readability; enlarge dots to make the points easier to inspect. section 10.4.2

Comparing payrolls with wins

A Cleveland dot plot compares inflation-adjusted payrolls and regular-season wins across all 30 teams from 2000–17. Both measures are converted to z-scores before plotting. For each team, a segment runs from the payroll dot to the wins dot: its length shows how closely investment and return align, while its direction shows whether wins lie above or below payroll on the standardized scale. In the displayed counts, 17 teams have wins above payroll and 13 have payroll above wins. section 11.4.2 section 11.4.2

p1 <- ggplot(final) +
 geom_segment(aes(x = Team, xend = Team, 
                  y = zSalaries, yend = zWins), color = "grey50") +
 geom_point(aes(x = Team, y = zSalaries), color = "springgreen3", 
            size = 3) +
 geom_point(aes(x = Team, y = zWins), color = "darkred", size = 3) +
 labs(title = "Inflation-Adjusted Payrolls vs. Regular Season Wins",
      subtitle = "2000-17", 
      x = "", 
      y = "Standard Deviations", 
      caption = "green/light = salaries\nred/dark = wins") + 
 theme(plot.title = element_text(face = "bold")) +
 theme(axis.text.x = element_text(angle = 45, hjust = 1))
print(p1)

This ggplot2 listing shows the Cleveland-dot-plot structure: one segment per team and separate point layers for standardized salaries and wins. section 11.4.2

Interpret dots as visual evidence, not proof of causation. Ranked payroll plots suggest that the highest-payroll teams usually reach the playoffs and that the lowest-payroll teams usually miss them; the Cleveland plot adds a team-level view of payroll-to-win alignment. Pair such charts with other evidence when drawing conclusions. section 10.5 section 11.6

How Statistics Slam Dunk covers it

How deep it goes
Works through data subsetting, ranking, color mapping, label formatting, standardization, and stem-based interpretation in ggplot2.
Examples
Uses 2000–17 NBA team payrolls, playoff classifications, championships, and regular-season wins, including paired 1999–2000 and 2000–01 plots.
What it assumes
Introduces z-scores and standard deviation for comparing unlike measures, while requiring data wrangling before plotting.
What you can do after
Apply it via ggplot2 to rank values by category or compare two standardized measures for each entity.
How it connects
Connects ggplot2, z-scores, standard deviation, correlation, lollipop charts, horizontal bar charts, and K-means clustering.

Related concepts

This explainer was generated by Manning's knowledge graph from the text of Statistics Slam Dunk. The section links point to the parts of the book it draws on.