Last active
May 9, 2026 18:11
-
-
Save cavedave/adb7ebcce0832a26ce4ba7386f0afe12 to your computer and use it in GitHub Desktop.
top nba single game scorers
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| year | assists | player | team | game_date | opponent | score | notes | playoff | |
|---|---|---|---|---|---|---|---|---|---|
| 1990 | 30 | Scott Skiles | Orlando Magic | December 30, 1990 | Denver Nuggets | 155–116 | [a] | no | |
| 1978 | 29 | Kevin Porter | New Jersey Nets | February 24, 1978 | Houston Rockets | 126–112 | [b] | no | |
| 1959 | 28 | Bob Cousy | Boston Celtics | February 27, 1959 | Minneapolis Lakers | 173–139 | [c] | no | |
| 1963 | 28 | Guy Rodgers | San Francisco Warriors | March 14, 1963 | St. Louis Hawks | 109–114 | [d] | no | |
| 1991 | 28 | John Stockton | Utah Jazz | January 15, 1991 | San Antonio Spurs | 124–102 | [e] | no | |
| 1982 | 27 | Geoff Huston | Cleveland Cavaliers | January 27, 1982 | Golden State Warriors | 110–106 | no | ||
| 1989 | 27 | John Stockton | Utah Jazz | December 19, 1989 | New York Knicks | 107–115 | [f] | no | |
| 1988 | 26 | John Stockton | Utah Jazz | April 14, 1988 | Portland Trail Blazers | 123–128 | no | ||
| 1974 | 25 | Ernie DiGregorio | Buffalo Braves | January 1, 1974 | Portland Trail Blazers | 120–119 | [g] | no | |
| 1979 | 25 | Kevin Porter | Detroit Pistons | March 9, 1979 | Boston Celtics | 160–119 | no | ||
| 1979 | 25 | Kevin Porter | Detroit Pistons | April 1, 1979 | Phoenix Suns | 105–116 | no | ||
| 1985 | 25 | Isiah Thomas | Detroit Pistons | February 13, 1985 | Dallas Mavericks | 124–119 | [h] | no | |
| 1987 | 25 | Nate McMillan | Seattle SuperSonics | February 23, 1987 | Los Angeles Clippers | 124–112 | [i] | no | |
| 1994 | 25 | Kevin Johnson | Phoenix Suns | April 6, 1994 | San Antonio Spurs | 107–95 | no | ||
| 1996 | 25 | Jason Kidd | Dallas Mavericks | February 8, 1996 | Utah Jazz | 136–133 | [j] | no | |
| 2017 | 25 | Rajon Rondo | New Orleans Pelicans | December 27, 2017 | Brooklyn Nets | 128–113 | no | ||
| 1966 | 24 | Guy Rodgers | Chicago Bulls | December 21, 1966 | New York Knicks | 110–107 | no | ||
| 1980 | 24 | Kevin Porter | Washington Bullets | March 23, 1980 | Detroit Pistons | 119–114 | no | ||
| 1984 | 24 | John Lucas | San Antonio Spurs | April 15, 1984 | Denver Nuggets | 157–154 | [k] | no | |
| 1984 | 24 | Magic Johnson | Los Angeles Lakers | May 15, 1984 | Phoenix Suns | 118–102 | [l] | yes | |
| 1985 | 24 | Isiah Thomas | Detroit Pistons | February 7, 1985 | Washington Bullets | 126–128 | [m] | no | |
| 1988 | 24 | John Stockton | Utah Jazz | May 17, 1988 | Los Angeles Lakers | 109–111 | [n] | yes | |
| 1989 | 24 | John Stockton | Utah Jazz | January 3, 1989 | Houston Rockets | 102–104 | [o] | no | |
| 1989 | 24 | Magic Johnson | Los Angeles Lakers | November 17, 1989 | Denver Nuggets | 119–105 | [p] | no | |
| 1990 | 24 | Magic Johnson | Los Angeles Lakers | January 9, 1990 | Phoenix Suns | 118–121 | [q] | no | |
| 2008 | 24 | Ramon Sessions | Milwaukee Bucks | April 14, 2008 | Chicago Bulls | 135–151 | [r] | no | |
| 2010 | 24 | Rajon Rondo | Boston Celtics | October 29, 2010 | New York Knicks | 105–101 | [s] | no | |
| 2019 | 24 | Russell Westbrook | Oklahoma City Thunder | January 10, 2019 | San Antonio Spurs | 147–154 | [t] | no | |
| 2021 | 24 | Russell Westbrook | Washington Wizards | May 3, 2021 | Indiana Pacers | 154–141 | [u] | no | |
| 1967 | 23 | Jerry West | Los Angeles Lakers | February 1, 1967 | Philadelphia 76ers | 143–133 | [v] | no | |
| 1978 | 23 | Kevin Porter | Detroit Pistons | December 27, 1978 | Houston Rockets | 131–119 | no | ||
| 1979 | 23 | Kevin Porter | Detroit Pistons | March 30, 1979 | Los Angeles Lakers | 113–124 | no | ||
| 1982 | 23 | Nate Archibald | Boston Celtics | February 5, 1982 | Denver Nuggets | 145–144 | [w] | no | |
| 1984 | 23 | Magic Johnson | Los Angeles Lakers | February 21, 1984 | Seattle SuperSonics | 128–112 | [x] | no | |
| 1985 | 23 | Magic Johnson | Los Angeles Lakers | May 3, 1985 | Portland Trail Blazers | 130–126 | [y] | yes | |
| 1988 | 23 | Magic Johnson | Los Angeles Lakers | April 20, 1988 | Dallas Mavericks | 114–107 | [z] | no | |
| 1989 | 23 | Fat Lever | Denver Nuggets | April 21, 1989 | Golden State Warriors | 139–121 | [aa] | no | |
| 1990 | 23 | John Stockton | Utah Jazz | April 12, 1990 | Los Angeles Lakers | 107–104 | [ab] | no | |
| 1990 | 23 | John Stockton | Utah Jazz | December 8, 1990 | Los Angeles Clippers | 105–95 | [ac] | no | |
| 1991 | 23 | John Stockton | Utah Jazz | November 29, 1991 | Golden State Warriors | 135–108 | no | ||
| 1992 | 23 | John Stockton | Utah Jazz | April 17, 1992 | Minnesota Timberwolves | 120–106 | no | ||
| 1993 | 23 | Mookie Blaylock | Atlanta Hawks | March 6, 1993 | Utah Jazz | 139–118 | no | ||
| 1996 | 23 | John Stockton | Utah Jazz | April 25, 1996 | Portland Trail Blazers | 110–102 | [ad] | yes | |
| 1997 | 23 | Nick Van Exel | Los Angeles Lakers | January 5, 1997 | Vancouver Grizzlies | 95–82 | [ae] | no | |
| 2001 | 23 | Jamaal Tinsley | Indiana Pacers | November 22, 2001 | Washington Wizards | 110–103 | [af] | no | |
| 2007 | 23 | Steve Nash | Phoenix Suns | April 29, 2007 | Los Angeles Lakers | 113–100 | [ag] | yes | |
| 2011 | 23 | Rajon Rondo | Boston Celtics | January 5, 2011 | San Antonio Spurs | 105–103 | [ah] | no | |
| 2026 | 23 | Ryan Nembhard | Dallas Mavericks | April 12, 2026 | Chicago Bulls | 149–128 | no | ||
| 2023 | 23 | Tyrese Haliburton | Indiana Pacers | December 30, 2023 | New York Knicks | 140–126 | no | ||
| 1961 | 22 | Oscar Robertson | Cincinnati Royals | October 29, 1961 | Syracuse Nationals | 139–132 | [ai] | no | |
| 1966 | 22 | Oscar Robertson | Cincinnati Royals | March 5, 1966 | New York Knicks | 149–145 | [aj] | no | |
| 1968 | 22 | Art Williams | San Diego Rockets | December 28, 1968 | Phoenix Suns | 136–126 | no | ||
| 1970 | 22 | Art Williams | San Diego Rockets | February 14, 1970 | San Francisco Warriors | 141–123 | no | ||
| 1975 | 22 | Kevin Porter | Washington Bullets | March 5, 1975 | Atlanta Hawks | 118–112 | no | ||
| 1978 | 22 | Kevin Porter | Detroit Pistons | December 23, 1978 | San Antonio Spurs | 126–130 | no | ||
| 1979 | 22 | Phil Ford | Kansas City Kings | February 21, 1979 | Milwaukee Bucks | 133–117 | no | ||
| 1979 | 22 | Kevin Porter | Detroit Pistons | February 27, 1979 | Chicago Bulls | 117–124 | no | ||
| 1981 | 22 | John Lucas | Golden State Warriors | February 27, 1981 | Denver Nuggets | 130–137 | no | ||
| 1983 | 22 | Allen Leavell | Houston Rockets | January 25, 1983 | New Jersey Nets | 114–111 | [ak] | no | |
| 1983 | 22 | Magic Johnson | Los Angeles Lakers | November 17, 1983 | Cleveland Cavaliers | 127–114 | no | ||
| 1984 | 22 | Ennis Whatley | Chicago Bulls | January 14, 1984 | New York Knicks | 111–113 | no | ||
| 1984 | 22 | Ennis Whatley | Chicago Bulls | March 3, 1984 | Atlanta Hawks | 102–98 | [al] | no | |
| 1987 | 22 | John Stockton | Utah Jazz | January 8, 1987 | Los Angeles Lakers | 107–101 | [am] | no | |
| 1988 | 22 | Doc Rivers | Atlanta Hawks | May 16, 1988 | Boston Celtics | 118–109 | yes | ||
| 1989 | 22 | John Stockton | Utah Jazz | December 11, 1989 | Cleveland Cavaliers | 110–113 | [an] | no | |
| 1990 | 22 | Magic Johnson | Los Angeles Lakers | November 6, 1990 | Portland Trail Blazers | 123–125 | [ao] | no | |
| 1992 | 22 | John Stockton | Utah Jazz | December 18, 1992 | Philadelphia 76ers | 112–98 | [ap] | no | |
| 1994 | 22 | Sherman Douglas | Boston Celtics | April 3, 1994 | Philadelphia 76ers | 135–112 | no | ||
| 1994 | 22 | Tim Hardaway | Golden State Warriors | December 16, 1994 | Orlando Magic | 128–131 | [aq] | no | |
| 1996 | 22 | Robert Pack | New Jersey Nets | November 23, 1996 | Dallas Mavericks | 114–91 | no | ||
| 1997 | 22 | Mark Jackson | Denver Nuggets | January 20, 1997 | New Jersey Nets | 132–123 | no | ||
| 2001 | 22 | George McCloud | Denver Nuggets | March 26, 2001 | Chicago Bulls | 109–104 | [ar] | no | |
| 2001 | 22 | Andre Miller | Cleveland Cavaliers | December 15, 2001 | Philadelphia 76ers | 91–94 | no | ||
| 2006 | 22 | Steve Nash | Phoenix Suns | January 2, 2006 | New York Knicks | 133–140 | [as] | no | |
| 2008 | 22 | Chris Duhon | New York Knicks | November 29, 2008 | Golden State Warriors | 138–125 | [at] | no | |
| 2016 | 22 | Russell Westbrook | Oklahoma City Thunder | December 17, 2016 | Phoenix Suns | 114–101 | [au] | no | |
| 2024 | 22 | Trae Young | Atlanta Hawks | November 27, 2024 | Cleveland Cavaliers | 135–124 | no | ||
| 2025 | 22 | Nikola Jokić | Denver Nuggets | March 7, 2025 | Phoenix Suns | 149–141 | [av] | no | |
| 2026 | 22 | Isaiah Collier | Utah Jazz | February 3, 2026 | Indiana Pacers | 131–122 | no |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # NBA single-game assists leaders (Tufte-style). | |
| # Data: nba_assists.csv from Wikipedia | |
| # https://en.wikipedia.org/wiki/List_of_NBA_single-game_assists_leaders | |
| # (22+ assists in a game; includes marked playoff games in CSV.) | |
| library(ggplot2) | |
| library(dplyr) | |
| library(ggtext) | |
| library(ggrepel) | |
| df <- read.csv("nba_assists.csv", stringsAsFactors = FALSE) | |
| counts_tbl <- df |> | |
| count(player, name = "games", sort = TRUE) | |
| total_games <- nrow(df) | |
| unique_players <- n_distinct(df$player) | |
| cat("\n=== NBA assists CSV summary ===\n") | |
| cat("Total games (rows): ", total_games, "\n", sep = "") | |
| cat("Unique players: ", unique_players, "\n\n", sep = "") | |
| cat("Top players by game count:\n") | |
| print(utils::head(counts_tbl, 15), row.names = FALSE) | |
| cat("\nTop 5 (strict rows 1–5):\n") | |
| print(utils::head(counts_tbl, 5), row.names = FALSE) | |
| if (nrow(counts_tbl) >= 6 && counts_tbl$games[6] == counts_tbl$games[5]) { | |
| cat("\nTied at rank 5 (same count as row 5):\n") | |
| tie_n <- counts_tbl$games[5] | |
| print(counts_tbl[counts_tbl$games == tie_n, ], row.names = FALSE) | |
| } | |
| cat("\n") | |
| # Top three by volume; everyone else gray (Rondo, Westbrook, etc.). | |
| # Distinct hues (avoid dark purple vs dark red): Stockton — Jazz green; | |
| # Porter — bright Pistons red; Magic — Lakers purple. | |
| star_players <- c( | |
| "John Stockton", | |
| "Kevin Porter", | |
| "Magic Johnson" | |
| ) | |
| df <- df |> | |
| mutate( | |
| highlight_player = if_else(player %in% star_players, player, "Others"), | |
| highlight_player = factor( | |
| highlight_player, | |
| levels = c(star_players, "Others") | |
| ) | |
| ) | |
| set.seed(42) | |
| j_x <- 0.45 | |
| df <- df |> | |
| mutate( | |
| year_j = year + runif(n(), -j_x, j_x), | |
| assists_j = assists | |
| ) | |
| star_colors <- c( | |
| "John Stockton" = "#00471B", | |
| "Kevin Porter" = "#E31837", | |
| "Magic Johnson" = "#552583", | |
| "Others" = "#999999" | |
| ) | |
| star_short <- c( | |
| "John Stockton" = "Stockton", | |
| "Kevin Porter" = "Porter", | |
| "Magic Johnson" = "Johnson" | |
| ) | |
| subtitle_md <- paste( | |
| vapply(star_players, function(sp) { | |
| sprintf( | |
| "<span style='color:%s'>%s %d</span>", | |
| unname(star_colors[sp]), | |
| unname(star_short[sp]), | |
| sum(df$player == sp) | |
| ) | |
| }, character(1)), | |
| collapse = ", " | |
| ) | |
| ymin <- 21.5 # pad so 22 tick sits cleanly; record label sits below y = 30 | |
| ymax <- max(df$assists) + 0.5 | |
| record_pt <- df |> | |
| slice_max(assists, n = 1, with_ties = FALSE) | |
| p <- ggplot(df, aes(year_j, assists_j)) + | |
| geom_hline( | |
| yintercept = 22, | |
| linetype = "dotted", | |
| linewidth = 0.35, | |
| alpha = 0.55, | |
| colour = "#999999" | |
| ) + | |
| geom_point(aes(colour = highlight_player), size = 4.2, stroke = 0, alpha = 0.9) + | |
| ggrepel::geom_text_repel( | |
| data = record_pt, | |
| aes(label = player), | |
| family = "Palatino", | |
| size = 3.4, | |
| colour = "#333333", | |
| min.segment.length = 0, | |
| segment.colour = "#999999", | |
| segment.size = 0.35, | |
| box.padding = 0.35, | |
| point.padding = 0.35, | |
| nudge_y = -0.75, | |
| seed = 42 | |
| ) + | |
| scale_colour_manual(values = star_colors) + | |
| guides(colour = "none") + | |
| scale_x_continuous( | |
| breaks = seq(floor(min(df$year) / 10) * 10, ceiling(max(df$year) / 10) * 10, by = 10), | |
| expand = expansion(mult = 0.02) | |
| ) + | |
| scale_y_continuous( | |
| limits = c(ymin, ymax), | |
| breaks = seq(22, floor(ymax), by = 1), | |
| expand = expansion(mult = 0.02) | |
| ) + | |
| labs( | |
| title = "Single-game NBA performances: 22+ player assists", | |
| subtitle = subtitle_md, | |
| x = "Year", | |
| y = "Assists", | |
| caption = "data wikipedia by @iamreddave" | |
| ) + | |
| coord_cartesian(clip = "on") + | |
| theme_minimal(base_size = 12, base_family = "Palatino") + | |
| theme( | |
| plot.background = element_rect(fill = "#fffff8", colour = NA), | |
| panel.background = element_rect(fill = "#fffff8", colour = NA), | |
| panel.grid.major.x = element_blank(), | |
| panel.grid.minor = element_blank(), | |
| panel.grid.major.y = element_line(colour = "#00000014", linewidth = 0.35), | |
| panel.border = element_blank(), | |
| axis.line.x.bottom = element_line(colour = "#cccccc", linewidth = 0.5), | |
| axis.line.y.left = element_line(colour = "#cccccc", linewidth = 0.5), | |
| axis.line.x.top = element_blank(), | |
| axis.line.y.right = element_blank(), | |
| axis.ticks.x.bottom = element_line(colour = "#bbbbbb", linewidth = 0.45), | |
| axis.ticks.y.left = element_line(colour = "#bbbbbb", linewidth = 0.45), | |
| axis.ticks.length = grid::unit(5.5, "pt"), | |
| plot.title = element_text(face = "bold", size = 15, colour = "#111111", margin = margin(b = 4)), | |
| plot.subtitle = element_markdown( | |
| size = 9, | |
| colour = "#555555", | |
| lineheight = 1.25, | |
| margin = margin(b = 10), | |
| family = "Palatino" | |
| ), | |
| plot.caption = element_text(hjust = 0, size = 8, colour = "#666666", margin = margin(t = 10)), | |
| axis.title = element_text(colour = "#333333"), | |
| axis.text = element_text(colour = "#444444"), | |
| plot.margin = margin(16, 24, 12, 16) | |
| ) | |
| print(p) | |
| ggsave( | |
| "nba_assists_tufte.png", | |
| plot = p, | |
| width = 10, | |
| height = 6.67, | |
| dpi = 200, | |
| bg = "#fffff8" | |
| ) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| year | points | player | season_type | |
|---|---|---|---|---|
| 1962 | 100 | Wilt Chamberlain | regular | |
| 2026 | 83 | Bam Adebayo | regular | |
| 2006 | 81 | Kobe Bryant | regular | |
| 1961 | 78 | Wilt Chamberlain | regular | |
| 1962 | 73 | Wilt Chamberlain | regular | |
| 1962 | 73 | Wilt Chamberlain | regular | |
| 1978 | 73 | David Thompson | regular | |
| 2024 | 73 | Luka Doncic | regular | |
| 1962 | 72 | Wilt Chamberlain | regular | |
| 1960 | 71 | Elgin Baylor | regular | |
| 1994 | 71 | David Robinson | regular | |
| 2023 | 71 | Donovan Mitchell | regular | |
| 2023 | 71 | Damian Lillard | regular | |
| 1963 | 70 | Wilt Chamberlain | regular | |
| 2017 | 70 | Devin Booker | regular | |
| 2024 | 70 | Joel Embiid | regular | |
| 1990 | 69 | Michael Jordan | regular | |
| 1967 | 68 | Wilt Chamberlain | regular | |
| 1977 | 68 | Pete Maravich | regular | |
| 1961 | 67 | Wilt Chamberlain | regular | |
| 1962 | 67 | Wilt Chamberlain | regular | |
| 1962 | 67 | Wilt Chamberlain | regular | |
| 1963 | 67 | Wilt Chamberlain | regular | |
| 1969 | 66 | Wilt Chamberlain | regular | |
| 1962 | 65 | Wilt Chamberlain | regular | |
| 1962 | 65 | Wilt Chamberlain | regular | |
| 1966 | 65 | Wilt Chamberlain | regular | |
| 2007 | 65 | Kobe Bryant | regular | |
| 1959 | 64 | Elgin Baylor | regular | |
| 1974 | 64 | Rick Barry | regular | |
| 1993 | 64 | Michael Jordan | regular | |
| 2023 | 64 | Giannis Antetokounmpo | regular | |
| 1949 | 63 | Joe Fulks | regular | |
| 1961 | 63 | Elgin Baylor | regular | |
| 1962 | 63 | Jerry West | regular | |
| 1962 | 63 | Wilt Chamberlain | regular | |
| 1964 | 63 | Wilt Chamberlain | regular | |
| 1978 | 63 | George Gervin | regular | |
| 1962 | 62 | Wilt Chamberlain | regular | |
| 1962 | 62 | Wilt Chamberlain | regular | |
| 1962 | 62 | Wilt Chamberlain | regular | |
| 1963 | 62 | Wilt Chamberlain | regular | |
| 1964 | 62 | Wilt Chamberlain | regular | |
| 1966 | 62 | Wilt Chamberlain | regular | |
| 2004 | 62 | Tracy McGrady | regular | |
| 2005 | 62 | Kobe Bryant | regular | |
| 2014 | 62 | Carmelo Anthony | regular | |
| 2021 | 62 | Stephen Curry | regular | |
| 2024 | 62 | Karl-Anthony Towns | regular | |
| 2024 | 62 | Devin Booker | regular | |
| 1952 | 61 | George Mikan | regular | |
| 1961 | 61 | Wilt Chamberlain | regular | |
| 1962 | 61 | Wilt Chamberlain | regular | |
| 1962 | 61 | Wilt Chamberlain | regular | |
| 1962 | 61 | Wilt Chamberlain | regular | |
| 1962 | 61 | Wilt Chamberlain | regular | |
| 1962 | 61 | Wilt Chamberlain | regular | |
| 1987 | 61 | Michael Jordan | regular | |
| 1987 | 61 | Michael Jordan | regular | |
| 1990 | 61 | Karl Malone | regular | |
| 2000 | 61 | Shaquille O'Neal | regular | |
| 2009 | 61 | Kobe Bryant | regular | |
| 2014 | 61 | LeBron James | regular | |
| 2019 | 61 | James Harden | regular | |
| 2019 | 61 | James Harden | regular | |
| 2020 | 61 | Damian Lillard | regular | |
| 2020 | 61 | Damian Lillard | regular | |
| 2024 | 61 | Jalen Brunson | regular | |
| 2025 | 61 | Nikola Jokic | regular | |
| 1961 | 60 | Wilt Chamberlain | regular | |
| 1961 | 60 | Wilt Chamberlain | regular | |
| 1969 | 60 | Wilt Chamberlain | regular | |
| 1984 | 60 | Bernard King | regular | |
| 1985 | 60 | Larry Bird | regular | |
| 1990 | 60 | Tom Chambers | regular | |
| 2005 | 60 | Allen Iverson | regular | |
| 2006 | 60 | Gilbert Arenas | regular | |
| 2007 | 60 | Kobe Bryant | regular | |
| 2016 | 60 | Kobe Bryant | regular | |
| 2016 | 60 | Klay Thompson | regular | |
| 2018 | 60 | James Harden | regular | |
| 2018 | 60 | Kemba Walker | regular | |
| 2019 | 60 | Damian Lillard | regular | |
| 2019 | 60 | James Harden | regular | |
| 2021 | 60 | Bradley Beal | regular | |
| 2021 | 60 | Jayson Tatum | regular | |
| 2022 | 60 | Karl-Anthony Towns | regular | |
| 2022 | 60 | Kyrie Irving | regular | |
| 2022 | 60 | Luka Doncic | regular | |
| 2023 | 60 | Damian Lillard | regular | |
| 2024 | 60 | Stephen Curry | regular | |
| 2024 | 60 | De'Aaron Fox | regular | |
| 2026 | 60 | Luka Doncic | regular | |
| 1986 | 63 | Michael Jordan | playoff | |
| 1962 | 61 | Elgin Baylor | playoff |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # NBA rebounding leaders scatter (Tufte-style). | |
| # Data: nba_rebounds.csv from Wikipedia | |
| # https://en.wikipedia.org/wiki/List_of_NBA_single-game_rebounding_leaders | |
| # — Table 1: 38+ rebounds in a game (all-time) | |
| # — Table 2: 30+ rebounds since NBA/ABA merger (1976) | |
| library(ggplot2) | |
| library(dplyr) | |
| library(ggtext) | |
| df <- read.csv("nba_rebounds.csv", stringsAsFactors = FALSE) | |
| # --- Summary: top 5 by appearances (ties at rank 5 reported) --- | |
| counts_tbl <- df |> | |
| count(player, name = "games", sort = TRUE) | |
| total_games <- nrow(df) | |
| unique_players <- n_distinct(df$player) | |
| cat("\n=== NBA rebound CSV summary ===\n") | |
| cat("Total games (rows): ", total_games, "\n", sep = "") | |
| cat("Unique players: ", unique_players, "\n\n", sep = "") | |
| cat("Top players by game count:\n") | |
| print(utils::head(counts_tbl, 15), row.names = FALSE) | |
| cat("\nTop 5 (strict rows 1–5):\n") | |
| print(utils::head(counts_tbl, 5), row.names = FALSE) | |
| if (nrow(counts_tbl) >= 6 && counts_tbl$games[6] == counts_tbl$games[5]) { | |
| cat("\nTied at rank 5 (same count as row 5):\n") | |
| tie_n <- counts_tbl$games[5] | |
| print(counts_tbl[counts_tbl$games == tie_n, ], row.names = FALSE) | |
| } | |
| cat("\n") | |
| # Highlight only the three clear leaders (Nater / Malone / Willis stay gray). | |
| # Jersey cues: Chamberlain — Warriors/Lakers gold; Russell — Celtics green; | |
| # Rodman — Bulls red (his most iconic look). | |
| star_players <- c( | |
| "Wilt Chamberlain", | |
| "Bill Russell", | |
| "Dennis Rodman" | |
| ) | |
| df <- df |> | |
| mutate( | |
| highlight_player = if_else(player %in% star_players, player, "Others"), | |
| highlight_player = factor( | |
| highlight_player, | |
| levels = c(star_players, "Others") | |
| ) | |
| ) | |
| set.seed(42) | |
| j_x <- 0.55 | |
| df <- df |> | |
| mutate( | |
| year_j = year + runif(n(), -j_x, j_x), | |
| rebounds_j = rebounds | |
| ) | |
| star_colors <- c( | |
| "Wilt Chamberlain" = "#FDB927", | |
| "Bill Russell" = "#007A33", | |
| "Dennis Rodman" = "#CE1141", | |
| "Others" = "#999999" | |
| ) | |
| star_short <- c( | |
| "Wilt Chamberlain" = "Chamberlain", | |
| "Bill Russell" = "Russell", | |
| "Dennis Rodman" = "Rodman" | |
| ) | |
| subtitle_md <- paste( | |
| vapply(star_players, function(sp) { | |
| sprintf( | |
| "<span style='color:%s'>%s %d</span>", | |
| unname(star_colors[sp]), | |
| unname(star_short[sp]), | |
| sum(df$player == sp) | |
| ) | |
| }, character(1)), | |
| collapse = ", " | |
| ) | |
| ymin <- floor(min(df$rebounds) / 5) * 5 | |
| ymax <- ceiling(max(df$rebounds) / 5) * 5 | |
| p <- ggplot(df, aes(year_j, rebounds_j)) + | |
| geom_point(aes(colour = highlight_player), size = 4.2, stroke = 0, alpha = 0.9) + | |
| scale_colour_manual(values = star_colors) + | |
| guides(colour = "none") + | |
| scale_x_continuous( | |
| breaks = seq(floor(min(df$year) / 10) * 10, ceiling(max(df$year) / 10) * 10, by = 10), | |
| expand = expansion(mult = 0.02) | |
| ) + | |
| scale_y_continuous( | |
| breaks = seq(ymin, ymax, by = 5), | |
| expand = expansion(mult = 0.03) | |
| ) + | |
| labs( | |
| title = "NBA single-game rebounding leaders", | |
| subtitle = subtitle_md, | |
| x = "Year", | |
| y = "Rebounds", | |
| caption = "data:wikipedia by @iamreddave" | |
| ) + | |
| coord_cartesian(clip = "on") + | |
| theme_minimal(base_size = 12, base_family = "Palatino") + | |
| theme( | |
| plot.background = element_rect(fill = "#fffff8", colour = NA), | |
| panel.background = element_rect(fill = "#fffff8", colour = NA), | |
| panel.grid.major.x = element_blank(), | |
| panel.grid.minor = element_blank(), | |
| panel.grid.major.y = element_line(colour = "#00000014", linewidth = 0.35), | |
| panel.border = element_blank(), | |
| axis.line.x.bottom = element_line(colour = "#cccccc", linewidth = 0.5), | |
| axis.line.y.left = element_line(colour = "#cccccc", linewidth = 0.5), | |
| axis.line.x.top = element_blank(), | |
| axis.line.y.right = element_blank(), | |
| axis.ticks.x.bottom = element_line(colour = "#bbbbbb", linewidth = 0.45), | |
| axis.ticks.y.left = element_blank(), | |
| axis.ticks.length = grid::unit(5.5, "pt"), | |
| plot.title = element_text(face = "bold", size = 15, colour = "#111111", margin = margin(b = 4)), | |
| plot.subtitle = element_markdown( | |
| size = 9, | |
| colour = "#555555", | |
| lineheight = 1.25, | |
| margin = margin(b = 10), | |
| family = "Palatino" | |
| ), | |
| plot.caption = element_text(hjust = 0, size = 8, colour = "#666666", margin = margin(t = 10)), | |
| axis.title = element_text(colour = "#333333"), | |
| axis.text = element_text(colour = "#444444"), | |
| plot.margin = margin(16, 24, 12, 16) | |
| ) | |
| print(p) | |
| ggsave( | |
| "nba_rebounds_tufte.png", | |
| plot = p, | |
| width = 10, | |
| height = 6.67, | |
| dpi = 200, | |
| bg = "#fffff8" | |
| ) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| year | rebounds | player | team | game_date | Opponent | notes | list_section | playoff | |
|---|---|---|---|---|---|---|---|---|---|
| 1960 | 55 | Wilt Chamberlain | Philadelphia Warriors | November 24, 1960 | Boston Celtics | Record set in a losing effort; grabbed 31 rebounds in one half; scored 34 points. | 38_or_more | no | |
| 1960 | 51 | Bill Russell | Boston Celtics | February 5, 1960 | Syracuse Nationals | Set a then-record for rebounds in a game; set a still-standing record for rebounds in a winning effort. | 38_or_more | no | |
| 1957 | 49 | Bill Russell | Boston Celtics | November 16, 1957 | Philadelphia Warriors | Set a then-record for rebounds in a game; set a still-standing record of 32 rebounds in a single half. | 38_or_more | no | |
| 1965 | 49 | Bill Russell | Boston Celtics | March 11, 1965 | Detroit Pistons | 38_or_more | yes | ||
| 1960 | 45 | Wilt Chamberlain | Philadelphia Warriors | February 6, 1960 | Syracuse Nationals | Single-game record for a rookie; scored 44 points; the fourth quadruple double-double in NBA history. | 38_or_more | no | |
| 1961 | 45 | Wilt Chamberlain | Philadelphia Warriors | January 21, 1961 | Los Angeles Lakers | Scored 56 points; the fifth quadruple double-double in NBA history. | 38_or_more | no | |
| 1959 | 43 | Wilt Chamberlain | Philadelphia Warriors | November 10, 1959 | New York Knicks | Set a then-record for a rookie; scored 39 points. | 38_or_more | no | |
| 1961 | 43 | Wilt Chamberlain | Philadelphia Warriors | December 8, 1961 | Los Angeles Lakers | Triple overtime; Chamberlain also scored a then-record 78 points in the game; the sixth quadruple double-double in NBA history. | 38_or_more | no | |
| 1963 | 43 | Bill Russell | Boston Celtics | January 20, 1963 | Los Angeles Lakers | 38_or_more | no | ||
| 1965 | 43 | Wilt Chamberlain | Philadelphia 76ers | March 6, 1965 | Boston Celtics | 38_or_more | no | ||
| 1960 | 42 | Wilt Chamberlain | Philadelphia Warriors | January 15, 1960 | Boston Celtics | Rookie season; scored 44 points; the second quadruple double-double in NBA history. | 38_or_more | no | |
| 1960 | 42 | Wilt Chamberlain | Philadelphia Warriors | January 25, 1960 | Detroit Pistons | Rookie season; Chamberlain also scored a rookie record 58 points in the same game; the third quadruple double-double in NBA history. | 38_or_more | no | |
| 1965 | 42 | Nate Thurmond | San Francisco Warriors | November 9, 1965 | Detroit Pistons | 38_or_more | no | ||
| 1966 | 42 | Wilt Chamberlain | Philadelphia 76ers | January 14, 1966 | Boston Celtics | Scored 37 points. | 38_or_more | no | |
| 1969 | 42 | Wilt Chamberlain | Los Angeles Lakers | March 7, 1969 | Boston Celtics | Overtime. | 38_or_more | no | |
| 1958 | 41 | Bill Russell | Boston Celtics | February 12, 1958 | Syracuse Nationals | 38_or_more | no | ||
| 1962 | 41 | Wilt Chamberlain | San Francisco Warriors | October 26, 1962 | Detroit Pistons | Overtime; scored 50 points; the seventh quadruple double-double in NBA history. | 38_or_more | no | |
| 1965 | 41 | Bill Russell | Boston Celtics | March 14, 1965 | San Francisco Warriors | 38_or_more | no | ||
| 1967 | 41 | Wilt Chamberlain | Philadelphia 76ers | April 5, 1967 | Boston Celtics | Game 3 victory in the Eastern Division finals. | 38_or_more | yes | |
| 1958 | 40 | Bill Russell | Boston Celtics | March 23, 1958 | Philadelphia Warriors | Game 3 victory in the Eastern Division finals. | 38_or_more | yes | |
| 1958 | 40 | Bill Russell | Boston Celtics | December 12, 1958 | Cincinnati Royals | Overtime. | 38_or_more | no | |
| 1959 | 40 | Wilt Chamberlain | Philadelphia Warriors | November 4, 1959 | Syracuse Nationals | Set a then-record for a rookie; third game of career; scored 41 points; the first quadruple double-double in NBA history. | 38_or_more | no | |
| 1960 | 40 | Bill Russell | Boston Celtics | March 29, 1960 | St. Louis Hawks | NBA Finals record (tie) | 38_or_more | yes | |
| 1961 | 40 | Bill Russell | Boston Celtics | February 12, 1961 | Philadelphia Warriors | 38_or_more | no | ||
| 1962 | 40 | Bill Russell | Boston Celtics | April 18, 1962 | Los Angeles Lakers | NBA Finals record (tie); game 7 overtime victory; Russell's 19 rebounds in a single quarter is the most of any NBA quarter — regular season or playoffs; scored 30 points. | 38_or_more | yes | |
| 1964 | 40 | Jerry Lucas | Cincinnati Royals | February 29, 1964 | Philadelphia 76ers | His rookie season. | 38_or_more | no | |
| 1964 | 40 | Wilt Chamberlain | San Francisco Warriors | November 22, 1964 | Detroit Pistons | Scored 50 points; the eighth and final quadruple double-double in NBA history. | 38_or_more | no | |
| 1965 | 40 | Wilt Chamberlain | Philadelphia 76ers | December 28, 1965 | Boston Celtics | Scored 31 points. | 38_or_more | no | |
| 1954 | 39 | Neil Johnston | Philadelphia Warriors | December 4, 1954 | Syracuse Nationals | Set a then-record. | 38_or_more | no | |
| 1959 | 39 | Bill Russell | Boston Celtics | January 25, 1959 | Detroit Pistons | 38_or_more | no | ||
| 1959 | 39 | Bill Russell | Boston Celtics | December 19, 1959 | New York Knicks | 38_or_more | no | ||
| 1959 | 39 | Wilt Chamberlain | Philadelphia Warriors | December 28, 1959 | Cincinnati Royals | Rookie season; scored 39 points. | 38_or_more | no | |
| 1960 | 39 | Wilt Chamberlain | Philadelphia Warriors | January 13, 1960 | Syracuse Nationals | Rookie season; scored 42 points. | 38_or_more | no | |
| 1960 | 39 | Wilt Chamberlain | Philadelphia Warriors | January 29, 1960 | Boston Celtics | Rookie season; scored 43 points. | 38_or_more | no | |
| 1960 | 39 | Bill Russell | Boston Celtics | March 19, 1960 | Philadelphia Warriors | 38_or_more | no | ||
| 1961 | 39 | Bill Russell | Boston Celtics | March 23, 1961 | Syracuse Nationals | 38_or_more | no | ||
| 1961 | 39 | Wilt Chamberlain | Philadelphia Warriors | November 4, 1961 | Detroit Pistons | Scored 58 points. | 38_or_more | no | |
| 1961 | 39 | Bill Russell | Boston Celtics | December 21, 1961 | New York Knicks | 38_or_more | no | ||
| 1965 | 39 | Wilt Chamberlain | Philadelphia 76ers | April 6, 1965 | Boston Celtics | Scored 30 points. | 38_or_more | no | |
| 1956 | 38 | Maurice Stokes | Rochester Royals | January 14, 1956 | Syracuse Nationals | Rookie season; triple-double, scored 26 points with 12 assists. | 38_or_more | no | |
| 1958 | 38 | Bill Russell | Boston Celtics | February 23, 1958 | Philadelphia Warriors | 38_or_more | no | ||
| 1959 | 38 | Bill Russell | Boston Celtics | December 4, 1959 | New York Knicks | 38_or_more | no | ||
| 1960 | 38 | Wilt Chamberlain | Philadelphia Warriors | November 29, 1960 | Los Angeles Lakers | Scored 44 points. | 38_or_more | no | |
| 1960 | 38 | Wilt Chamberlain | Philadelphia Warriors | December 18, 1960 | Cincinnati Royals | Scored 32 points. | 38_or_more | no | |
| 1961 | 38 | Bill Russell | Boston Celtics | April 11, 1961 | St. Louis Hawks | Scored 30 points | 38_or_more | no | |
| 1961 | 38 | Wilt Chamberlain | Philadelphia Warriors | November 25, 1961 | Chicago Packers | Scored 39 points. | 38_or_more | no | |
| 1963 | 38 | Bill Russell | Boston Celtics | February 21, 1963 | San Francisco Warriors | 38_or_more | no | ||
| 1963 | 38 | Wilt Chamberlain | San Francisco Warriors | February 21, 1963 | Boston Celtics | Scored 40 points. | 38_or_more | no | |
| 1963 | 38 | Bill Russell | Boston Celtics | April 16, 1963 | Los Angeles Lakers | 38_or_more | no | ||
| 1964 | 38 | Wilt Chamberlain | San Francisco Warriors | April 24, 1964 | Boston Celtics | 38_or_more | no | ||
| 1965 | 38 | Bill Russell | Boston Celtics | January 30, 1965 | New York Knicks | 38_or_more | no | ||
| 1965 | 38 | Bill Russell | Boston Celtics | March 3, 1965 | Los Angeles Lakers | 38_or_more | no | ||
| 1967 | 38 | Wilt Chamberlain | Philadelphia 76ers | March 2, 1967 | San Francisco Warriors | Triple-double, scored 24 points with 13 assists. | 38_or_more | no | |
| 1967 | 38 | Wilt Chamberlain | Philadelphia 76ers | April 16, 1967 | San Francisco Warriors | Triple-double, scored 10 points with 10 assists; 26 rebounds in one half, setting the NBA Playoffs record. | 38_or_more | yes | |
| 1967 | 38 | Wilt Chamberlain | Philadelphia 76ers | December 20, 1967 | Seattle SuperSonics | Scored 53 points. | 38_or_more | no | |
| 1969 | 38 | Wilt Chamberlain | Los Angeles Lakers | March 9, 1969 | Baltimore Bullets | 38_or_more | no | ||
| 1979 | 37 | Moses Malone | Houston Rockets | February 9, 1979 | New Orleans Jazz | Scored 33 points. | 30_or_more_since_1976 | no | |
| 1988 | 35 | Charles Oakley | Chicago Bulls | April 22, 1988 | Cleveland Cavaliers | 30_or_more_since_1976 | no | ||
| 1992 | 34 | Dennis Rodman | Detroit Pistons | March 4, 1992 | Indiana Pacers | Overtime. | 30_or_more_since_1976 | no | |
| 1993 | 34 | Rony Seikaly | Miami Heat | March 3, 1993 | Washington Bullets | 30_or_more_since_1976 | no | ||
| 1976 | 33 | Swen Nater | Milwaukee Bucks | December 19, 1976 | Atlanta Hawks | Scored 30 points. | 30_or_more_since_1976 | no | |
| 1992 | 33 | Kevin Willis | Atlanta Hawks | February 19, 1992 | Washington Bullets | Overtime. | 30_or_more_since_1976 | no | |
| 1996 | 33 | Charles Barkley | Houston Rockets | November 2, 1996 | Phoenix Suns | 30_or_more_since_1976 | no | ||
| 1979 | 32 | Robert Parish | Golden State Warriors | March 30, 1979 | New York Knicks | Scored 30 points. | 30_or_more_since_1976 | no | |
| 1979 | 32 | Swen Nater | San Diego Clippers | December 14, 1979 | Denver Nuggets | 30_or_more_since_1976 | no | ||
| 1982 | 32 | Moses Malone | Houston Rockets | February 11, 1982 | Seattle SuperSonics | Scored 38 points. | 30_or_more_since_1976 | no | |
| 1992 | 32 | Dennis Rodman | Detroit Pistons | January 28, 1992 | Charlotte Hornets | Overtime. | 30_or_more_since_1976 | no | |
| 1994 | 32 | Dennis Rodman | San Antonio Spurs | January 22, 1994 | Dallas Mavericks | 30_or_more_since_1976 | no | ||
| 1981 | 31 | Larry Smith | Golden State Warriors | March 28, 1981 | Denver Nuggets | His rookie season. | 30_or_more_since_1976 | no | |
| 1991 | 31 | Kevin Willis | Atlanta Hawks | December 3, 1991 | Dallas Mavericks | 30_or_more_since_1976 | no | ||
| 1992 | 31 | Dennis Rodman | Detroit Pistons | March 14, 1992 | Sacramento Kings | 30_or_more_since_1976 | no | ||
| 1996 | 31 | Dikembe Mutombo | Denver Nuggets | March 26, 1996 | Charlotte Hornets | Double overtime. | 30_or_more_since_1976 | no | |
| 2010 | 31 | Kevin Love | Minnesota Timberwolves | November 12, 2010 | New York Knicks | Scored 31 points; youngest player to record 30+ rebounds in a single game. | 30_or_more_since_1976 | no | |
| 2024 | 31 | Jusuf Nurkić | Phoenix Suns | March 3, 2024 | Oklahoma City Thunder | 30_or_more_since_1976 | no | ||
| 1978 | 30 | Kareem Abdul-Jabbar | Los Angeles Lakers | February 3, 1978 | New Jersey Nets | Overtime; scored 37 points. | 30_or_more_since_1976 | no | |
| 1978 | 30 | Swen Nater | Buffalo Braves | March 4, 1978 | New Jersey Nets | 30_or_more_since_1976 | no | ||
| 1988 | 30 | Michael Cage | Los Angeles Clippers | April 24, 1988 | Seattle SuperSonics | 30_or_more_since_1976 | no | ||
| 1995 | 30 | Dennis Rodman | San Antonio Spurs | February 21, 1995 | Houston Rockets | 30_or_more_since_1976 | no | ||
| 2012 | 30 | Andrew Bynum | Los Angeles Lakers | April 11, 2012 | San Antonio Spurs | 30_or_more_since_1976 | no | ||
| 2018 | 30 | Dwight Howard | Charlotte Hornets | March 21, 2018 | Brooklyn Nets | Scored 32 points. | 30_or_more_since_1976 | no | |
| 2021 | 30 | Enes Kanter Freedom | Portland Trail Blazers | April 10, 2021 | Detroit Pistons | 30_or_more_since_1976 | no |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| library(ggplot2) | |
| library(dplyr) | |
| library(ggtext) | |
| library(ggrepel) | |
| df <- read.csv("nba_60plus.csv", stringsAsFactors = FALSE) | |
| star_players <- c( | |
| "Wilt Chamberlain", | |
| "Kobe Bryant", | |
| "Damian Lillard", | |
| "Michael Jordan", | |
| "James Harden", | |
| "Elgin Baylor" | |
| ) | |
| df <- df |> | |
| mutate( | |
| highlight_player = case_when( | |
| player == "Wilt Chamberlain" ~ "Wilt Chamberlain", | |
| player == "Kobe Bryant" ~ "Kobe Bryant", | |
| player == "Damian Lillard" ~ "Damian Lillard", | |
| player == "Michael Jordan" ~ "Michael Jordan", | |
| player == "James Harden" ~ "James Harden", | |
| player == "Elgin Baylor" ~ "Elgin Baylor", | |
| TRUE ~ "Others" | |
| ), | |
| highlight_player = factor(highlight_player, levels = c(star_players, "Others")) | |
| ) | |
| # Horizontal jitter only: dot *centers* sit on true scores (y = points). | |
| # Vertical jitter made e.g. the 100-pt game sit below the 100 gridline — ggplot | |
| # always centers points on (x, y), never "top edge on value". | |
| set.seed(42) | |
| j_x <- 0.55 | |
| df <- df |> | |
| mutate( | |
| year_j = year + runif(n(), -j_x, j_x), | |
| points_j = points | |
| ) |> | |
| # Two 1987 MJ 61-pt rows: offset after jitter (L/up, R/down) | |
| group_by(year, points, player) |> | |
| mutate( | |
| mj_twin = if_else( | |
| player == "Michael Jordan" & points == 61 & year == 1987 & n() == 2, | |
| row_number(), | |
| NA_integer_ | |
| ) | |
| ) |> | |
| ungroup() |> | |
| mutate( | |
| year_j = case_when( | |
| mj_twin == 1L ~ year_j - 0.2, | |
| mj_twin == 2L ~ year_j + 0.2, | |
| TRUE ~ year_j | |
| ), | |
| points_j = case_when( | |
| mj_twin == 1L ~ points_j + 0.2, | |
| mj_twin == 2L ~ points_j - 0.2, | |
| TRUE ~ points_j | |
| ) | |
| ) |> | |
| select(-mj_twin) | |
| # Team-leaning colors for highlighted stars (+ gray Others). Baylor: Lakers-era navy. | |
| star_colors <- c( | |
| "Wilt Chamberlain" = "#E6B800", | |
| "Kobe Bryant" = "#552583", | |
| "Michael Jordan" = "#CE1141", | |
| "James Harden" = "#76b7b2", | |
| "Damian Lillard" = "#1a1a1a", | |
| "Elgin Baylor" = "#1c2e50", | |
| "Others" = "#888888" | |
| ) | |
| star_short <- c( | |
| "Wilt Chamberlain" = "Chamberlain", | |
| "Kobe Bryant" = "Bryant", | |
| "Damian Lillard" = "Lillard", | |
| "Michael Jordan" = "Jordan", | |
| "James Harden" = "Harden", | |
| "Elgin Baylor" = "Baylor" | |
| ) | |
| label_df <- df |> | |
| filter(player == "Bam Adebayo", points == 83) |> | |
| mutate(label = "Bam Adebayo") | |
| subtitle_md <- paste( | |
| vapply(star_players, function(sp) { | |
| sprintf( | |
| "<span style='color:%s'>%s %d</span>", | |
| unname(star_colors[sp]), | |
| unname(star_short[sp]), | |
| sum(df$player == sp) | |
| ) | |
| }, character(1)), | |
| collapse = ", " | |
| ) | |
| p <- ggplot(df, aes(year_j, points_j)) + | |
| geom_hline( | |
| yintercept = 60, | |
| linetype = "dotted", | |
| linewidth = 0.35, | |
| alpha = 0.55, | |
| colour = "#999999" | |
| ) + | |
| geom_point(aes(colour = highlight_player), size = 4.8, stroke = 0, alpha = 0.92) + | |
| scale_colour_manual(values = star_colors) + | |
| guides(colour = "none") + | |
| geom_text_repel( | |
| data = label_df, | |
| aes(label = label), | |
| size = 3.4, | |
| family = "Palatino", | |
| colour = "#111111", | |
| min.segment.length = 0, | |
| box.padding = 0.45, | |
| max.overlaps = Inf, | |
| segment.color = "#666666", | |
| segment.size = 0.3, | |
| point.padding = 0 | |
| ) + | |
| # Anchor speculative-era games at 2026; omit 2030 tick to avoid implying real timeline | |
| scale_x_continuous( | |
| breaks = c(seq(1950, 2020, by = 10), 2026), | |
| expand = expansion(mult = c(0.02, 0.12)) | |
| ) + | |
| scale_y_continuous( | |
| breaks = seq(60, 100, by = 10), | |
| expand = expansion(mult = 0.03) | |
| ) + | |
| labs( | |
| title = "NBA games with 60 or more points", | |
| subtitle = subtitle_md, | |
| x = "Year", | |
| y = "Points scored", | |
| caption = "data: wikipedia by @iamreddave" | |
| ) + | |
| coord_cartesian(clip = "off") + | |
| theme_minimal(base_size = 12, base_family = "Palatino") + | |
| theme( | |
| plot.background = element_rect(fill = "#fffff8", colour = NA), | |
| panel.background = element_rect(fill = "#fffff8", colour = NA), | |
| panel.grid.major.x = element_blank(), | |
| panel.grid.minor = element_blank(), | |
| panel.grid.major.y = element_line(colour = "#00000014", linewidth = 0.35), | |
| panel.border = element_blank(), | |
| axis.line.x.bottom = element_line(colour = "#cccccc", linewidth = 0.5), | |
| axis.line.y.left = element_line(colour = "#cccccc", linewidth = 0.5), | |
| axis.line.x.top = element_blank(), | |
| axis.line.y.right = element_blank(), | |
| axis.ticks.x.bottom = element_line(colour = "#bbbbbb", linewidth = 0.45), | |
| axis.ticks.y.left = element_blank(), | |
| axis.ticks.length = grid::unit(5.5, "pt"), | |
| plot.title = element_text( | |
| face = "bold", | |
| size = 15, | |
| colour = "#111111", | |
| margin = margin(b = 4) | |
| ), | |
| plot.subtitle = element_markdown( | |
| size = 9.5, | |
| colour = "#555555", | |
| lineheight = 1.2, | |
| margin = margin(b = 10), | |
| family = "Palatino" | |
| ), | |
| plot.caption = element_text( | |
| hjust = 1, | |
| size = 9, | |
| colour = "#666666", | |
| margin = margin(t = 10) | |
| ), | |
| axis.title = element_text(colour = "#333333"), | |
| axis.text = element_text(colour = "#444444"), | |
| plot.margin = margin(16, 36, 12, 16) | |
| ) | |
| print(p) | |
| # Tufte-style PNG; Bam Adebayo labeled (name only), segment to jittered point | |
| ggsave( | |
| "nba_60plus_tufte.png", | |
| plot = p, | |
| width = 10, | |
| height = 6.67, | |
| dpi = 200, | |
| bg = "#fffff8" | |
| ) |
cavedave
commented
May 9, 2026
Author
Author
Author
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment

