The purpose of this project is to use machine learning to create a model to predict the outcome of playoff series in the NBA.
Our team_data frame has one row per team per game played in the NBA back to 2004. Our player_data frame has one row per player per game played in the NBA back to 2004. Each of these data frames have basic box score info for the given player/team for the given game.
library(tidyverse)
library(tidymodels)
library(ggimage)
library(gt)
library(gtExtras)
team_data <- read_csv("team_game_data.csv")
player_data <- read_csv("player_game_data.csv")
We will manipulate the data to get a data frame with one row per team per playoff series.
playoff_games <- team_data |>
filter(
gametype == 4
)
playoff_series <- playoff_games |>
filter(
# Find all game 1s
# The last integer of the game ID is the game number of the series
substr(nbagameid, nchar(nbagameid), nchar(nbagameid)) == 1,
) |>
mutate(
# Add variable representing round number
# Playoff round is represented by the 6th integer of game ID
round = substr(nbagameid, 6, 6)
) |>
select(
# select distinct series defining vars and playoff round number
season,
team = off_team,
opponent = def_team,
round,
# Binary variable that indicates if the home team is "team" (1) or "opponent" (0)
team_home = off_home,
start_date = gamedate
) |>
# summarise using playoff_games df and join it back
left_join(playoff_games |>
summarise(
games = n(),
team_wins = sum(off_win),
.by = c(season, off_team, def_team)
) |>
mutate(
# Not needed, using for validation
opponent_wins = games - team_wins
),
by = c("season",
"team" = "off_team",
"opponent" = "def_team")
) |>
mutate(
# Binary var indicating if the "team" (1) or "opponent" (0) won the series
series_win = ifelse(team_wins > opponent_wins, 1, 0)
)
#2023-24 playoff games aren't included in my data set, so I will add them in manually
playoffs23 <- read_csv("playoffs23.csv")
p2_df <- playoff_series |>
filter(
# Going to use seasons back to 2014-15 for prediction purposes
season >= 2014
) |>
select(
season,
team,
opponent,
start_date,
round,
hca = team_home,
series_win,
games
) |>
rbind(playoffs23)
Now that we have the playoff series that we want to make predictions for, we need to gather regular season data from that same season to create features with.
# Set up data
off_metrics <- team_data |>
filter(
# Regular Season
gametype == 2
) |>
summarise(
ortg = (sum(points)*100) / sum(possessions),
ppa = sum(shotattemptpoints) / sum(shotattempts),
off_ast_pct = sum(assists) / sum(fgmade),
oreb_pct = sum(reboffensive) / sum(reboundchance),
off_tov_pct = (sum(turnovers)*100) / sum(possessions),
wp = sum(off_win) / (sum(off_win) + sum(def_win)),
.by = c(season, off_team)
)
def_metrics <- team_data |>
filter(
# Regular Season
gametype == 2
) |>
summarise(
drtg = (sum(points)*100) / sum(possessions),
def_ast_pct = sum(assists) / sum(fgmade),
dreb_pct = sum(rebdefensive) / sum(reboundchance),
def_tov_pct = (sum(turnovers)*100) / sum(possessions),
blk_pct = sum(blocksagainst) / sum(fg2attempted),
.by = c(season, def_team)
)
Combine features back to the playoff series we will be predicting.
p2_df <- p2_df |>
# Join in team metrics
left_join(
off_metrics,
by = c("season",
"team" = "off_team")
) |>
left_join(
def_metrics,
by = c("season",
"team" = "def_team")
) |>
# Join in opponent metrics
left_join(
off_metrics |> rename_with( ~ paste0("opp_", .x)),
by = c("season" = "opp_season",
"opponent" = "opp_off_team")
) |>
left_join(
def_metrics |> rename_with( ~ paste0("opp_", .x)),
by = c("season" = "opp_season",
"opponent" = "opp_def_team")
) |>
mutate(
nrtg = ortg - drtg,
opp_nrtg = opp_ortg - opp_drtg,
diff_nrtg = nrtg - opp_nrtg,
series_win = as.factor(series_win),
round = as.factor(ifelse(round == 4, 3, round)),
diff_wp = wp - opp_wp,
diff_drtg = opp_drtg - drtg,
diff_ortg = ortg - opp_ortg
)
I want to use just a few smart features for this prediction problem, instead of making a very complex model with a high quantity of variables. I had some ideas for intuitive features that seem to affect playoff series, and below I will work on creating good representations of them.
The features I want to capture are: How “hot” or “cold” a team finishes a season
# Try to capture how good a team is playing at the end of the season
ortg_since_jan <- team_data |>
filter(
months(gamedate) %in% month.name[1:8],
gametype == 2
) |>
summarise(
ortg_since_jan = (sum(points)*100) / sum(possessions),
wp_since_jan = sum(off_win) / (sum(off_win)+sum(def_win)),
.by = c(season, off_team)
)
drtg_since_jan <- team_data |>
filter(
months(gamedate) %in% month.name[1:8]
) |>
summarise(
drtg_since_jan = (sum(points)*100) / sum(possessions),
.by = c(season, def_team)
)
p2_df <- p2_df |>
left_join(
ortg_since_jan,
by = c("season",
"team" = "off_team")
) |>
left_join(
drtg_since_jan,
by = c("season",
"team" = "def_team")
) |>
left_join(
ortg_since_jan |> rename_with( ~ paste0("opp_", .x)),
by = c("season" = "opp_season",
"opponent" = "opp_off_team")
) |>
left_join(
drtg_since_jan |> rename_with( ~ paste0("opp_", .x)),
by = c("season" = "opp_season",
"opponent" = "opp_def_team")
) |>
mutate(
nrtg_since_jan = ortg_since_jan - drtg_since_jan,
opp_nrtg_since_jan = opp_ortg_since_jan - opp_drtg_since_jan,
diff_nrtg_since_jan = nrtg_since_jan - opp_nrtg_since_jan
)
Which team has the “best” player
# Find a way to determine best player on the team
best_players <- player_data |>
filter(
gametype == 2
) |>
mutate(
#create a binary variable to see if a player appeared in each game
played_in_game = ifelse(seconds > 0, 1, 0)
) |>
summarise(
fgm = sum(fgmade),
fg3m = sum(fg3made),
fga = sum(fgattempted),
usg = (sum(shotattempts) + sum(turnovers)) / (sum(teamshotattempts) + sum(teamturnovers)),
mpg = (sum(seconds) / 60) / sum(played_in_game),
ast = sum(assists),
gp = sum(played_in_game),
ppps = (sum(points) + sum(assists)*2.3) / sum(seconds),
.by = c(season, player_name, team)
) |>
filter(
mpg > 25,
gp > 25
) |>
mutate(
efg_x_usg = ((fgm + (.5*fg3m)) / fga) * usg
) |>
summarise(
max_ppps = max(ppps),
max_efgXusg = max(efg_x_usg),
.by = c(season, team)
)
p2_df <- p2_df |>
left_join(
best_players,
by = c("season", "team")
) |>
left_join(
best_players |> rename_with( ~ paste0("opp_", .x)),
by = c("season" = "opp_season",
"opponent" = "opp_team")
) |>
mutate(
diff_max_ppps = max_ppps - opp_max_ppps,
diff_max_efgXusg = max_efgXusg - opp_max_efgXusg
)
Important players who will miss playoff games
# Find important players who are missing games right before the playoffs start and may not play in playoffs
missing <- player_data |>
filter(
gametype == 2,
months(gamedate) %in% month.name[3:8]
) |>
mutate(
#create a binary variable to see if a player appeared in each game
played_in_game = ifelse(seconds > 0, 1, 0)
) |>
summarise(
mpg = (sum(seconds) / 60) / sum(played_in_game),
pct_games_missed = sum(missed) / n(),
.by = c(season, player_name, team)
) |>
filter(
mpg >= 25,
pct_games_missed > .5
) |>
summarise(
possible_missing = n(),
.by = c(season, team)
)
p2_df <- p2_df |>
left_join(
missing,
by = c("season", "team")
) |>
left_join(
missing |> rename_with( ~ paste0("opp_", .x)),
by = c("season" = "opp_season",
"opponent" = "opp_team")
) |>
mutate(
possible_missing = ifelse(is.na(possible_missing), 0, possible_missing),
opp_possible_missing = ifelse(is.na(opp_possible_missing), 0, opp_possible_missing),
diff_possible_missing = possible_missing - opp_possible_missing
)
How much playoff experience a team has
# Create a variable representing playoff experience on each team
# Just going to accomplish this with last four seasons worth of playoff experience
player_year4 = player_data |>
# Find players on each team
filter(
gametype == 2
) |>
mutate(
#create a binary variable to see if a player appeared in each game
played_in_game = ifelse(seconds > 0, 1, 0)
) |>
summarise(
mpg = (sum(seconds) / 60) / sum(played_in_game),
.by = c(nbapersonid, season, team)
) |>
mutate(
season3 = season - 1,
season2 = season - 2,
season1 = season - 3,
season0 = season - 4
)
playoff_players <- player_data |>
filter(
gametype == 4
) |>
select(
season,
nbapersonid,
team
) |>
unique()
# Find playoff players from the years before
playoff_exp <- player_year4 |>
left_join(
playoff_players |> mutate(yr3 = 1),
by = c("nbapersonid",
"season3" = "season",
"team")
) |>
left_join(
playoff_players |> mutate(yr2 = 1),
by = c("nbapersonid",
"season2" = "season",
"team")
) |>
left_join(
playoff_players |> mutate(yr1 = 1),
by = c("nbapersonid",
"season1" = "season",
"team")
)|>
left_join(
playoff_players |> mutate(yr0 = 1),
by = c("nbapersonid",
"season0" = "season",
"team")
) |>
filter(
mpg > 20
) |>
mutate(
yr3 = ifelse(is.na(yr3), 0, yr3),
yr2 = ifelse(is.na(yr2), 0, yr2),
yr1 = ifelse(is.na(yr1), 0, yr1),
yr0 = ifelse(is.na(yr0), 0, yr0),
yrs_exp = yr3 + yr2 + yr1 + yr0
) |>
summarise(
avg_po_exp_l4y = mean(yrs_exp),
.by = c(team, season)
)
p2_df <- p2_df |>
left_join(
playoff_exp,
by = c("season", "team")
) |>
left_join(
playoff_exp |> rename_with( ~ paste0("opp_", .x)),
by = c("season" = "opp_season",
"opponent" = "opp_team")
) |>
mutate(
diff_avg_po_exp_l4y = avg_po_exp_l4y - opp_avg_po_exp_l4y
)
H2H success from the two teams that year in the regular season
# Create feature for h2h success between each team so far this season
h2h_record <- team_data |>
filter(
gametype == 2
) |>
summarise(
h2h_wp = sum(off_win) / (sum(off_win) + sum(def_win)),
h2h_gp = sum(off_win) + sum(def_win),
.by = c(season, off_team, def_team)
)
p2_df <- p2_df |>
left_join(
h2h_record,
by = c("season",
"team" = "off_team",
"opponent" = "def_team")
) |>
mutate(
opp_h2h_wp = 1 - h2h_wp,
diff_h2h_wp = h2h_wp - opp_h2h_wp
)
Team success on the road and at home in the regular season
# Create feature for home/away wp
home_record <- team_data |>
filter(
gametype == 2,
off_home == 1
) |>
summarise(
home_wp = sum(off_win) / (sum(off_win) + sum(def_win)),
.by = c(season, off_team)
)
away_record <- team_data |>
filter(
gametype == 2,
off_home == 0
) |>
summarise(
away_wp = sum(off_win) / (sum(off_win) + sum(def_win)),
.by = c(season, off_team)
)
p2_df <- p2_df |>
left_join(
home_record,
by = c("season",
"team" = "off_team")
) |>
left_join(
home_record |> rename_with( ~ paste0("opp_", .x)),
by = c("season" = "opp_season",
"opponent" = "opp_off_team")
) |>
left_join(
away_record,
by = c("season",
"team" = "off_team")
) |>
left_join(
away_record |> rename_with( ~ paste0("opp_", .x)),
by = c("season" = "opp_season",
"opponent" = "opp_off_team")
) |>
mutate(
diff_home_wp = home_wp - opp_home_wp,
diff_away_wp = away_wp - opp_away_wp
)
I am going to use a logistic regression model to predict the chance each team has to win their series.
After some testing and analysis, the variables I found useful in model are the metrics representing how the team has been doing since January in the regular season, which team has the best player, playoff experience, and h2h record between the two teams in the regular season, as well as team DRTG (which was useful when the model seemed to be overfitting to which team had the best player, which was a metric made from offensive numbers). Some other metrics I tried, such as a feature for how many important players a team was missing, were too imperfect to provide predictive value, and would need to be further refined before being included.
# Saving 2022 and 2023 for testing set
training <- p2_df |>
filter(
season <= 2021
)
testing <- p2_df |>
filter(
season > 2021
)
set.seed(2183287)
#assign observations to cv folds
cv_data <- training |>
vfold_cv(v=5)
rec <- recipe(series_win ~ diff_nrtg_since_jan + diff_max_efgXusg + diff_drtg +
diff_avg_po_exp_l4y + diff_h2h_wp,
data = training)
mod <- logistic_reg() |>
set_engine("glm") %>%
set_mode("classification")
wf <- workflow() |>
add_model(mod) |>
add_recipe(rec)
cv_results <- fit_resamples(
wf,
resamples = cv_data,
metrics = metric_set(accuracy, roc_auc)
)
collect_metrics(cv_results)
## # A tibble: 2 × 6
## .metric .estimator mean n std_err .config
## <chr> <chr> <dbl> <int> <dbl> <chr>
## 1 accuracy binary 0.746 5 0.0444 Preprocessor1_Model1
## 2 roc_auc binary 0.797 5 0.0389 Preprocessor1_Model1
final_model_wp <- fit(wf, data = training)
preds_wp <- predict(final_model_wp, new_data = testing, type = "prob") |>
select(pred_series_win = .pred_1)
testing_with_preds = testing |>
cbind(preds_wp)
My model is a relativity simple model that uses differences in key inputs between two teams playing a playoff series. Using playoff data from the 2015 to 2022 Playoffs, it calculates how much win percentage each advantage/disadvantage a team has over the other is worth, depending on the category of the advantage and the magnitude of that advantage. Once the model trains and decides how many win percentage points each advantage/disadvantage is worth, it applies onto the future playoff series in question.
My model emphasizes non-stylistic stats, or in other words, doesn’t penalize or give advantages to teams based on the style they play or what their specific strengths/weaknesses are.
I think my model’s strengths come from the fact that it doesn’t care what style your team plays when assessing win probability. It’s been proven that there are many different roster constructions and play styles that can win championships, so when trying to predict playoff series outcomes, I think my model gains advantages by staying away from using things like which team has the better team rebound percentages, or which team shoots more/better from 3 point range. This allows the model to give insight into what else (besides random variation) is driving the outcome of basketball games.
The weaknesses in my model come from imperfect proxy features representing what I deem to be an important predictor. For example, I made a quick feature to determine which team has the “best player” using an interaction of eFG% and USG%. There are other better metrics out there that could do a better job than what I created (something like VORP?), but I used the data I had. If I had more time/data, I would want to improve these proxies. I could find a teams record at full strength for the season. I could use prior playoff series in features for upcoming series. I tried to create a variable for injury detection, but it was imperfect and ultimately not useful. That is something that has lots of influence over win probability, so getting a more accurate feature for that would be a high priority.
Since we need to find each teams chances of advancing to each round, we need to find the predicted chance they could beat anyone in the bracket.
I will set up a data frame that includes every possible matchup between the 2024 playoff teams, then import the data needed for my features.
seeds_confs <- data.frame(
team = c("OKC", "DEN", "MIN", "LAC", "DAL", "PHX", "LAL", "NOP",
"BOS", "NYK", "MIL", "CLE", "ORL", "IND", "PHI", "MIA"),
seed = c(1:8, 1:8),
conf = c(rep("West", 8), rep("East", 8)),
games_won = c(57, 57, 56, 51, 50, 49, 47, 49,
64, 50, 49, 48, 47, 47, 47, 46)
)
possible_series <- expand.grid(
team = playoffs23$team,
opponent = playoffs23$opponent,
round = playoffs23$round
) |>
unique() |>
filter(
team != opponent
) |>
mutate(
season = 2023
) |>
# Join in team metrics
left_join(
off_metrics,
by = c("season",
"team" = "off_team")
) |>
left_join(
def_metrics,
by = c("season",
"team" = "def_team")
) |>
# Join in opponent metrics
left_join(
off_metrics |> rename_with( ~ paste0("opp_", .x)),
by = c("season" = "opp_season",
"opponent" = "opp_off_team")
) |>
left_join(
def_metrics |> rename_with( ~ paste0("opp_", .x)),
by = c("season" = "opp_season",
"opponent" = "opp_def_team")
) |>
# Join in nrtg since Jan
left_join(
ortg_since_jan,
by = c("season",
"team" = "off_team")
) |>
left_join(
drtg_since_jan,
by = c("season",
"team" = "def_team")
) |>
# Join in opp nrtg since Jan
left_join(
ortg_since_jan |> rename_with( ~ paste0("opp_", .x)),
by = c("season" = "opp_season",
"opponent" = "opp_off_team")
) |>
left_join(
drtg_since_jan |> rename_with( ~ paste0("opp_", .x)),
by = c("season" = "opp_season",
"opponent" = "opp_def_team")
) |>
# Join in best player data
left_join(
best_players,
by = c("season", "team")
) |>
left_join(
best_players |> rename_with( ~ paste0("opp_", .x)),
by = c("season" = "opp_season",
"opponent" = "opp_team")
) |>
# Join in potential missing player data
left_join(
missing,
by = c("season", "team")
) |>
left_join(
missing |> rename_with( ~ paste0("opp_", .x)),
by = c("season" = "opp_season",
"opponent" = "opp_team")
) |>
# Join in playoff experience data
left_join(
playoff_exp,
by = c("season", "team")
) |>
left_join(
playoff_exp |> rename_with( ~ paste0("opp_", .x)),
by = c("season" = "opp_season",
"opponent" = "opp_team")
) |>
# Join in h2h record data
left_join(
h2h_record,
by = c("season",
"team" = "off_team",
"opponent" = "def_team")
) |>
# Join home/away wp
left_join(
home_record,
by = c("season",
"team" = "off_team")
) |>
left_join(
home_record |> rename_with( ~ paste0("opp_", .x)),
by = c("season" = "opp_season",
"opponent" = "opp_off_team")
) |>
left_join(
away_record,
by = c("season",
"team" = "off_team")
) |>
left_join(
away_record |> rename_with( ~ paste0("opp_", .x)),
by = c("season" = "opp_season",
"opponent" = "opp_off_team")
) |>
mutate(
nrtg = ortg - drtg,
opp_nrtg = opp_ortg - opp_drtg,
diff_ortg = ortg - opp_ortg,
diff_drtg = drtg - opp_drtg,
diff_nrtg = nrtg - opp_nrtg,
nrtg_since_jan = ortg_since_jan - drtg_since_jan,
opp_nrtg_since_jan = opp_ortg_since_jan - opp_drtg_since_jan,
diff_nrtg_since_jan = nrtg_since_jan - opp_nrtg_since_jan,
diff_max_ppps = max_ppps - opp_max_ppps,
diff_max_efgXusg = max_efgXusg - opp_max_efgXusg,
possible_missing = ifelse(is.na(possible_missing), 0, possible_missing),
opp_possible_missing = ifelse(is.na(opp_possible_missing), 0, opp_possible_missing),
diff_possible_missing = possible_missing - opp_possible_missing,
diff_avg_po_exp_l4y = avg_po_exp_l4y - opp_avg_po_exp_l4y,
opp_h2h_wp = 1 - h2h_wp,
diff_h2h_wp = h2h_wp - opp_h2h_wp,
diff_home_wp = home_wp - opp_home_wp,
diff_away_wp = away_wp - opp_away_wp
) |>
left_join(
seeds_confs |> rename_with( ~ paste0("team_", .x)),
by = c("team" = "team_team")
) |>
left_join(
seeds_confs |> rename_with( ~ paste0("opp_", .x)),
by = c("opponent" = "opp_team")
) |>
filter(
# If not the finals, conf must be the same
((round != 4) & (team_conf == opp_conf)) |
# If the finals, conf must be different
((round == 4) & (team_conf != opp_conf))
) |>
mutate(
# Set hca for potential series
hca = case_when(
(round %in% c(1, 2, 3)) & (team_seed < opp_seed) ~ 1,
(round %in% c(1, 2, 3)) & (team_seed > opp_seed) ~ 0,
(round == 4) & (team_games_won > opp_games_won) ~ 1,
(round == 4) & (team_games_won < opp_games_won) ~ 0,
(round == 4) & (team_games_won == opp_games_won) ~ rbinom(1, 1, .5)
),
round = as.factor(ifelse(round == 4, 3, round))
)
I can then predict on every one of those matchups, and get the predicted probability of each team winning.
# Predict on every possible series
poss_preds_col <- predict(final_model_wp, new_data = possible_series, type = "prob") |>
select(pred_series_win = .pred_1)
poss_series_preds <- possible_series |>
cbind(poss_preds_col)
Now that we have the predicted probability of every possible series, we want to simulate the playoffs many times and see how often teams make each round.
sim_playoffs <- function(df){
# Create function to determine matchup based on predicted probabilities
determine_series_winner <- function(team1, team2, po_round){
poss_series_preds |>
filter(
team == team1,
opponent == team2,
round == po_round
) |>
mutate(
winner = ifelse(rbinom(1, 1, pred_series_win), team, opponent)
) |>
pull(winner)
}
# First Round Matchups
west_1v8_winner <- determine_series_winner("OKC", "NOP", 1)
west_2v7_winner <- determine_series_winner("DEN", "LAL", 1)
west_3v6_winner <- determine_series_winner("MIN", "PHX", 1)
west_4v5_winner <- determine_series_winner("LAC", "DAL", 1)
east_1v8_winner <- determine_series_winner("BOS", "MIA", 1)
east_2v7_winner <- determine_series_winner("NYK", "PHI", 1)
east_3v6_winner <- determine_series_winner("MIL", "IND", 1)
east_4v5_winner <- determine_series_winner("CLE", "ORL", 1)
made_second_round <- c(west_1v8_winner,
west_2v7_winner,
west_3v6_winner,
west_4v5_winner,
east_1v8_winner,
east_2v7_winner,
east_3v6_winner,
east_4v5_winner)
# Second Round Matchups
west_18v45_winner <- determine_series_winner(
west_1v8_winner,
west_4v5_winner,
2)
west_27v36_winner <- determine_series_winner(
west_2v7_winner,
west_3v6_winner,
2)
east_18v45_winner <- determine_series_winner(
east_1v8_winner,
east_4v5_winner,
2)
east_27v36_winner <- determine_series_winner(
east_2v7_winner,
east_3v6_winner,
2)
made_third_round <- c(west_18v45_winner,
west_27v36_winner,
east_18v45_winner,
east_27v36_winner)
# Third Round Matchups
west_winner <- determine_series_winner(
west_18v45_winner,
west_27v36_winner,
3)
east_winner <- determine_series_winner(
east_18v45_winner,
east_27v36_winner,
3)
made_finals <- c(west_winner,
east_winner)
# Finals
finals_winner <- determine_series_winner(
west_winner,
east_winner,
3)
return(poss_series_preds |>
select(team) |>
unique() |>
mutate(made_2r = ifelse(team %in% made_second_round, 1, 0),
made_3r = ifelse(team %in% made_third_round, 1, 0),
made_4r = ifelse(team %in% made_finals, 1, 0),
win_finals = ifelse(team == finals_winner, 1, 0)))
}
# Run a bunch to get how often each team advances to each round
sim_results <- map(1:1000, ~ sim_playoffs()) |>
bind_rows() |>
summarise(
made_2r = mean(made_2r),
made_3r = mean(made_3r),
made_4r = mean(made_4r),
win_finals = mean(win_finals),
.by = team
) |>
cbind(data.frame(
url = c("https://a.espncdn.com/i/teamlogos/nba/500/okc.png",
"https://a.espncdn.com/i/teamlogos/nba/500/min.png",
"https://a.espncdn.com/i/teamlogos/nba/500/phx.png",
"https://a.espncdn.com/i/teamlogos/nba/500/den.png",
"https://a.espncdn.com/i/teamlogos/nba/500/lal.png",
"https://a.espncdn.com/i/teamlogos/nba/500/dal.png",
"https://seeklogo.com/images/L/la-clippers-logo-38F03D21AF-seeklogo.com.png",
"https://a.espncdn.com/i/teamlogos/nba/500/no.png",
"https://a.espncdn.com/i/teamlogos/nba/500/nyk.png",
"https://a.espncdn.com/i/teamlogos/nba/500/ind.png",
"https://a.espncdn.com/i/teamlogos/nba/500/mil.png",
"https://a.espncdn.com/i/teamlogos/nba/500/cle.png",
"https://a.espncdn.com/i/teamlogos/nba/500/orl.png",
"https://a.espncdn.com/i/teamlogos/nba/500/bos.png",
"https://a.espncdn.com/i/teamlogos/nba/500/mia.png",
"https://a.espncdn.com/i/teamlogos/nba/500/phi.png")
))
ggplot() +
xlim(-25, 25) + ylim(-18, 25) +
geom_segment(aes(x=-3, xend=3, y=0, yend=0), size = 3, color = "#007ac1") +
geom_segment(aes(x=-6, xend=0, y=-6, yend=-6), size = 3, color = "#007ac1") +
geom_segment(aes(x=0, xend=6, y=6, yend=6), size = 2, color = "black") +
geom_segment(aes(x=-6, xend=-6, y=-8, yend=8), size = 2, color = "black") +
geom_segment(aes(x=-6, xend=-6, y=-6.2, yend=8.2), size = 3, color = "#007ac1") +
geom_segment(aes(x=6, xend=6, y=-8, yend=8), size = 2, color = "black") +
geom_segment(aes(x=-12, xend=-5.95, y=-8, yend=-8), size = 2, color = "black") +
geom_segment(aes(x=-12, xend=-5.95, y=8, yend=8), size = 3, color = "#007ac1") +
geom_segment(aes(x=12, xend=5.95, y=8, yend=8), size = 2, color = "black") +
geom_segment(aes(x=12, xend=5.95, y=-8, yend=-8), size = 2, color = "black") +
geom_segment(aes(x=-12, xend=-12, y=4, yend=12), size = 2, color = "black") +
geom_segment(aes(x=-12, xend=-12, y=7.88, yend=12.2), size = 3, color = "#007ac1") +
geom_segment(aes(x=-12, xend=-12, y=-12, yend=-4), size = 2, color = "black") +
geom_segment(aes(x=12, xend=12, y=4, yend=12), size = 2, color = "black") +
geom_segment(aes(x=12, xend=12, y=-12, yend=-4), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-11.95, y=12, yend=12), size = 3, color = "#007ac1") +
geom_segment(aes(x=-18, xend=-11.95, y=4, yend=4), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-11.95, y=-12, yend=-12), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-11.95, y=-4, yend=-4), size = 2, color = "black") +
geom_segment(aes(x=18, xend=11.95, y=-12, yend=-12), size = 2, color = "black") +
geom_segment(aes(x=18, xend=11.95, y=-4, yend=-4), size = 2, color = "black") +
geom_segment(aes(x=18, xend=11.95, y=12, yend=12), size = 2, color = "black") +
geom_segment(aes(x=18, xend=11.95, y=4, yend=4), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=1, yend=7), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=9, yend=15), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=11.8, yend=15.2), size = 3, color = "#007ac1") +
geom_segment(aes(x=-18, xend=-18, y=-1, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=-9, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=1, yend=7), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=9, yend=15), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=-1, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=-9, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=15, yend=15), size = 3, color = "#007ac1") +
geom_segment(aes(x=-24, xend=-17.95, y=9, yend=9), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=7, yend=7), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=1, yend=1), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=-15, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=-9, yend=-9), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=-7, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=-1, yend=-1), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=15, yend=15), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=9, yend=9), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=7, yend=7), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=1, yend=1), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=-15, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=-9, yend=-9), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=-7, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=-1, yend=-1), size = 2, color = "black") +
geom_image(aes(x=-21, y=15),
image = "https://a.espncdn.com/i/teamlogos/nba/500/okc.png",
size = .2) +
annotate("text",
x = -15,
y = 13.5,
label = sim_results |>
filter(team == "OKC") |>
mutate(text = paste0(made_2r*100, "%")) |>
pull(text),
color = "#ef3b24",
fontface = "bold",
size = 5
) +
annotate("text",
x = -9,
y = 9.5,
label = sim_results |>
filter(team == "OKC") |>
mutate(text = paste0(made_3r*100, "%")) |>
pull(text),
color = "#ef3b24",
fontface = "bold",
size = 5
) +
annotate("text",
x = -3,
y = -4.5,
label = sim_results |>
filter(team == "OKC") |>
mutate(text = paste0(made_4r*100, "%")) |>
pull(text),
color = "#ef3b24",
fontface = "bold",
size = 5
) +
annotate("text",
x = 0,
y = 1.5,
label = sim_results |>
filter(team == "OKC") |>
mutate(text = paste0(win_finals*100, "%")) |>
pull(text),
color = "#ef3b24",
fontface = "bold",
size = 5
) +
annotate("text",
x = 0,
y= 23,
label = "Predicted Probability of\nEach 2024 Playoff Team Advancing",
color = "black",
fontface = "bold",
size = 8) +
geom_image(aes(x=0, y=-16),
image = "https://content.sportslogos.net/logos/6/981/full/2111__nba_playoffs-primary-2018.png",
size = .4) +
theme_void()
ggplot() +
xlim(-25, 25) + ylim(-18, 25) +
geom_segment(aes(x=-3, xend=3, y=0, yend=0), size = 3, color = "#0860A8") +
geom_segment(aes(x=-6, xend=0, y=-6, yend=-6), size = 3, color = "#0860A8") +
geom_segment(aes(x=0, xend=6, y=6, yend=6), size = 2, color = "black") +
geom_segment(aes(x=-6, xend=-6, y=-8, yend=8), size = 2, color = "black") +
geom_segment(aes(x=-6, xend=-6, y=-5.8, yend=-8.2), size = 3, color = "#0860A8") +
geom_segment(aes(x=6, xend=6, y=-8, yend=8), size = 2, color = "black") +
geom_segment(aes(x=-12, xend=-5.95, y=-8, yend=-8), size = 3, color = "#0860A8") +
geom_segment(aes(x=-12, xend=-5.95, y=8, yend=8), size = 2, color = "black") +
geom_segment(aes(x=12, xend=5.95, y=8, yend=8), size = 2, color = "black") +
geom_segment(aes(x=12, xend=5.95, y=-8, yend=-8), size = 2, color = "black") +
geom_segment(aes(x=-12, xend=-12, y=4, yend=12), size = 2, color = "black") +
geom_segment(aes(x=-12, xend=-12, y=-12, yend=-4), size = 2, color = "black") +
geom_segment(aes(x=-12, xend=-12, y=-7.8, yend=-12.2), size = 3, color = "#0860A8") +
geom_segment(aes(x=12, xend=12, y=4, yend=12), size = 2, color = "black") +
geom_segment(aes(x=12, xend=12, y=-12, yend=-4), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-11.95, y=12, yend=12), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-11.95, y=4, yend=4), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-11.95, y=-12, yend=-12), size = 3, color = "#0860A8") +
geom_segment(aes(x=-18, xend=-11.95, y=-4, yend=-4), size = 2, color = "black") +
geom_segment(aes(x=18, xend=11.95, y=-12, yend=-12), size = 2, color = "black") +
geom_segment(aes(x=18, xend=11.95, y=-4, yend=-4), size = 2, color = "black") +
geom_segment(aes(x=18, xend=11.95, y=12, yend=12), size = 2, color = "black") +
geom_segment(aes(x=18, xend=11.95, y=4, yend=4), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=1, yend=7), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=9, yend=15), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=-1, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=-9, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=-12.2, yend=-8.8), size = 3, color = "#0860A8") +
geom_segment(aes(x=18, xend=18, y=1, yend=7), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=9, yend=15), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=-1, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=-9, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=15, yend=15), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=9, yend=9), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=7, yend=7), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=1, yend=1), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=-15, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=-9, yend=-9), size = 3, color = "#0860A8") +
geom_segment(aes(x=-24, xend=-17.95, y=-7, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=-1, yend=-1), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=15, yend=15), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=9, yend=9), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=7, yend=7), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=1, yend=1), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=-15, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=-9, yend=-9), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=-7, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=-1, yend=-1), size = 2, color = "black") +
geom_image(aes(x=-21, y=-9),
image = "https://a.espncdn.com/i/teamlogos/nba/500/den.png",
size = .12) +
annotate("text",
x = -15,
y = -10.5,
label = sim_results |>
filter(team == "DEN") |>
mutate(text = paste0(made_2r*100, "%")) |>
pull(text),
color = "#fec524",
fontface = "bold",
size = 5
) +
annotate("text",
x = -9,
y = -6.5,
label = sim_results |>
filter(team == "DEN") |>
mutate(text = paste0(made_3r*100, "%")) |>
pull(text),
color = "#fec524",
fontface = "bold",
size = 5
) +
annotate("text",
x = -3,
y = -4.5,
label = sim_results |>
filter(team == "DEN") |>
mutate(text = paste0(made_4r*100, "%")) |>
pull(text),
color = "#fec524",
fontface = "bold",
size = 5
) +
annotate("text",
x = 0,
y = 1.5,
label = sim_results |>
filter(team == "DEN") |>
mutate(text = paste0(win_finals*100, "%")) |>
pull(text),
color = "#fec524",
fontface = "bold",
size = 5
) +
annotate("text",
x = 0,
y= 23,
label = "Predicted Probability of\nEach 2024 Playoff Team Advancing",
color = "black",
fontface = "bold",
size = 8) +
geom_image(aes(x=0, y=-16),
image = "https://content.sportslogos.net/logos/6/981/full/2111__nba_playoffs-primary-2018.png",
size = .4) +
theme_void()
ggplot() +
xlim(-25, 25) + ylim(-18, 25) +
geom_segment(aes(x=-3, xend=3, y=0, yend=0), size = 3, color = "#0E3764") +
geom_segment(aes(x=-6, xend=0, y=-6, yend=-6), size = 3, color = "#0E3764") +
geom_segment(aes(x=0, xend=6, y=6, yend=6), size = 2, color = "black") +
geom_segment(aes(x=-6, xend=-6, y=-8, yend=8), size = 2, color = "black") +
geom_segment(aes(x=-6, xend=-6, y=-5.8, yend=-8.2), size = 3, color = "#0E3764") +
geom_segment(aes(x=6, xend=6, y=-8, yend=8), size = 2, color = "black") +
geom_segment(aes(x=-12, xend=-5.95, y=-8, yend=-8), size = 3, color = "#0E3764") +
geom_segment(aes(x=-12, xend=-5.95, y=8, yend=8), size = 2, color = "black") +
geom_segment(aes(x=12, xend=5.95, y=8, yend=8), size = 2, color = "black") +
geom_segment(aes(x=12, xend=5.95, y=-8, yend=-8), size = 2, color = "black") +
geom_segment(aes(x=-12, xend=-12, y=4, yend=12), size = 2, color = "black") +
geom_segment(aes(x=-12, xend=-12, y=-12, yend=-4), size = 2, color = "black") +
geom_segment(aes(x=-12, xend=-12, y=-8.2, yend=-3.8), size = 3, color = "#0E3764") +
geom_segment(aes(x=12, xend=12, y=4, yend=12), size = 2, color = "black") +
geom_segment(aes(x=12, xend=12, y=-12, yend=-4), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-11.95, y=12, yend=12), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-11.95, y=4, yend=4), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-11.95, y=-12, yend=-12), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-11.95, y=-4, yend=-4), size = 3, color = "#0E3764") +
geom_segment(aes(x=18, xend=11.95, y=-12, yend=-12), size = 2, color = "black") +
geom_segment(aes(x=18, xend=11.95, y=-4, yend=-4), size = 2, color = "black") +
geom_segment(aes(x=18, xend=11.95, y=12, yend=12), size = 2, color = "black") +
geom_segment(aes(x=18, xend=11.95, y=4, yend=4), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=1, yend=7), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=9, yend=15), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=-1, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=-9, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=-.8, yend=-4.2), size = 3, color = "#0E3764") +
geom_segment(aes(x=18, xend=18, y=1, yend=7), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=9, yend=15), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=-1, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=-9, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=15, yend=15), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=9, yend=9), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=7, yend=7), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=1, yend=1), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=-15, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=-9, yend=-9), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=-7, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=-1, yend=-1), size = 3, color = "#0E3764") +
geom_segment(aes(x=24, xend=17.95, y=15, yend=15), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=9, yend=9), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=7, yend=7), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=1, yend=1), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=-15, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=-9, yend=-9), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=-7, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=-1, yend=-1), size = 2, color = "black") +
geom_image(aes(x=-21, y=-1),
image = "https://a.espncdn.com/i/teamlogos/nba/500/min.png",
size = .13) +
annotate("text",
x = -15,
y = -2.5,
label = sim_results |>
filter(team == "MIN") |>
mutate(text = paste0(made_2r*100, "%")) |>
pull(text),
color = "#78BE20",
fontface = "bold",
size = 5
) +
annotate("text",
x = -9,
y = -6.5,
label = sim_results |>
filter(team == "MIN") |>
mutate(text = paste0(made_3r*100, "%")) |>
pull(text),
color = "#78BE20",
fontface = "bold",
size = 5
) +
annotate("text",
x = -3,
y = -4.5,
label = sim_results |>
filter(team == "MIN") |>
mutate(text = paste0(made_4r*100, "%")) |>
pull(text),
color = "#78BE20",
fontface = "bold",
size = 5
) +
annotate("text",
x = 0,
y = 1.5,
label = sim_results |>
filter(team == "MIN") |>
mutate(text = paste0(win_finals*100, "%")) |>
pull(text),
color = "#78BE20",
fontface = "bold",
size = 5
) +
annotate("text",
x = 0,
y= 23,
label = "Predicted Probability of\nEach 2024 Playoff Team Advancing",
color = "black",
fontface = "bold",
size = 8) +
geom_image(aes(x=0, y=-16),
image = "https://content.sportslogos.net/logos/6/981/full/2111__nba_playoffs-primary-2018.png",
size = .4) +
theme_void()
ggplot() +
xlim(-25, 25) + ylim(-18, 25) +
geom_segment(aes(x=-3, xend=3, y=0, yend=0), size = 3, color = "#006BB6") +
geom_segment(aes(x=-6, xend=0, y=-6, yend=-6), size = 3, color = "#006BB6") +
geom_segment(aes(x=0, xend=6, y=6, yend=6), size = 2, color = "black") +
geom_segment(aes(x=-6, xend=-6, y=-8, yend=8), size = 2, color = "black") +
geom_segment(aes(x=-6, xend=-6, y=-6.2, yend=8.2), size = 3, color = "#006BB6") +
geom_segment(aes(x=6, xend=6, y=-8, yend=8), size = 2, color = "black") +
geom_segment(aes(x=-12, xend=-5.95, y=-8, yend=-8), size = 2, color = "black") +
geom_segment(aes(x=-12, xend=-5.95, y=8, yend=8), size = 3, color = "#006BB6") +
geom_segment(aes(x=12, xend=5.95, y=8, yend=8), size = 2, color = "black") +
geom_segment(aes(x=12, xend=5.95, y=-8, yend=-8), size = 2, color = "black") +
geom_segment(aes(x=-12, xend=-12, y=4, yend=12), size = 2, color = "black") +
geom_segment(aes(x=-12, xend=-12, y=8.2, yend=3.8), size = 3, color = "#006BB6") +
geom_segment(aes(x=-12, xend=-12, y=-12, yend=-4), size = 2, color = "black") +
geom_segment(aes(x=12, xend=12, y=4, yend=12), size = 2, color = "black") +
geom_segment(aes(x=12, xend=12, y=-12, yend=-4), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-11.95, y=12, yend=12), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-11.95, y=4, yend=4), size = 3, color = "#006BB6") +
geom_segment(aes(x=-18, xend=-11.95, y=-12, yend=-12), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-11.95, y=-4, yend=-4), size = 2, color = "black") +
geom_segment(aes(x=18, xend=11.95, y=-12, yend=-12), size = 2, color = "black") +
geom_segment(aes(x=18, xend=11.95, y=-4, yend=-4), size = 2, color = "black") +
geom_segment(aes(x=18, xend=11.95, y=12, yend=12), size = 2, color = "black") +
geom_segment(aes(x=18, xend=11.95, y=4, yend=4), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=1, yend=7), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=9, yend=15), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=3.8, yend=7.2), size = 3, color = "#006BB6") +
geom_segment(aes(x=-18, xend=-18, y=-1, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=-9, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=1, yend=7), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=9, yend=15), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=-1, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=-9, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=15, yend=15), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=9, yend=9), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=7, yend=7), size = 3, color = "#006BB6") +
geom_segment(aes(x=-24, xend=-17.95, y=1, yend=1), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=-15, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=-9, yend=-9), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=-7, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=-1, yend=-1), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=15, yend=15), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=9, yend=9), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=7, yend=7), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=1, yend=1), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=-15, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=-9, yend=-9), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=-7, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=-1, yend=-1), size = 2, color = "black") +
geom_image(aes(x=-21, y=7),
image = "https://seeklogo.com/images/L/la-clippers-logo-38F03D21AF-seeklogo.com.png",
size = .11) +
annotate("text",
x = -15,
y = 5.5,
label = sim_results |>
filter(team == "LAC") |>
mutate(text = paste0(made_2r*100, "%")) |>
pull(text),
color = "#FA0028",
fontface = "bold",
size = 5
) +
annotate("text",
x = -9,
y = 9.5,
label = sim_results |>
filter(team == "LAC") |>
mutate(text = paste0(made_3r*100, "%")) |>
pull(text),
color = "#FA0028",
fontface = "bold",
size = 5
) +
annotate("text",
x = -3,
y = -4.5,
label = sim_results |>
filter(team == "LAC") |>
mutate(text = paste0(made_4r*100, "%")) |>
pull(text),
color = "#FA0028",
fontface = "bold",
size = 5
) +
annotate("text",
x = 0,
y = 1.5,
label = sim_results |>
filter(team == "LAC") |>
mutate(text = paste0(win_finals*100, "%")) |>
pull(text),
color = "#FA0028",
fontface = "bold",
size = 5
) +
annotate("text",
x = 0,
y= 23,
label = "Predicted Probability of\nEach 2024 Playoff Team Advancing",
color = "black",
fontface = "bold",
size = 8) +
geom_image(aes(x=0, y=-16),
image = "https://content.sportslogos.net/logos/6/981/full/2111__nba_playoffs-primary-2018.png",
size = .4) +
theme_void()
ggplot() +
xlim(-25, 25) + ylim(-18, 25) +
geom_segment(aes(x=-3, xend=3, y=0, yend=0), size = 3, color = "#0C479D") +
geom_segment(aes(x=-6, xend=0, y=-6, yend=-6), size = 3, color = "#0C479D") +
geom_segment(aes(x=0, xend=6, y=6, yend=6), size = 2, color = "black") +
geom_segment(aes(x=-6, xend=-6, y=-8, yend=8), size = 2, color = "black") +
geom_segment(aes(x=-6, xend=-6, y=-6.2, yend=8.2), size = 3, color = "#0C479D") +
geom_segment(aes(x=6, xend=6, y=-8, yend=8), size = 2, color = "black") +
geom_segment(aes(x=-12, xend=-5.95, y=-8, yend=-8), size = 2, color = "black") +
geom_segment(aes(x=-12, xend=-5.95, y=8, yend=8), size = 3, color = "#0C479D") +
geom_segment(aes(x=12, xend=5.95, y=8, yend=8), size = 2, color = "black") +
geom_segment(aes(x=12, xend=5.95, y=-8, yend=-8), size = 2, color = "black") +
geom_segment(aes(x=-12, xend=-12, y=4, yend=12), size = 2, color = "black") +
geom_segment(aes(x=-12, xend=-12, y=8.2, yend=3.8), size = 3, color = "#0C479D") +
geom_segment(aes(x=-12, xend=-12, y=-12, yend=-4), size = 2, color = "black") +
geom_segment(aes(x=12, xend=12, y=4, yend=12), size = 2, color = "black") +
geom_segment(aes(x=12, xend=12, y=-12, yend=-4), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-11.95, y=12, yend=12), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-11.95, y=4, yend=4), size = 3, color = "#0C479D") +
geom_segment(aes(x=-18, xend=-11.95, y=-12, yend=-12), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-11.95, y=-4, yend=-4), size = 2, color = "black") +
geom_segment(aes(x=18, xend=11.95, y=-12, yend=-12), size = 2, color = "black") +
geom_segment(aes(x=18, xend=11.95, y=-4, yend=-4), size = 2, color = "black") +
geom_segment(aes(x=18, xend=11.95, y=12, yend=12), size = 2, color = "black") +
geom_segment(aes(x=18, xend=11.95, y=4, yend=4), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=1, yend=7), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=9, yend=15), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=.8, yend=4.2), size = 3, color = "#0C479D") +
geom_segment(aes(x=-18, xend=-18, y=-1, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=-9, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=1, yend=7), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=9, yend=15), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=-1, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=-9, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=15, yend=15), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=9, yend=9), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=7, yend=7), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=1, yend=1), size = 3, color = "#0C479D") +
geom_segment(aes(x=-24, xend=-17.95, y=-15, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=-9, yend=-9), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=-7, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=-1, yend=-1), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=15, yend=15), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=9, yend=9), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=7, yend=7), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=1, yend=1), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=-15, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=-9, yend=-9), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=-7, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=-1, yend=-1), size = 2, color = "black") +
geom_image(aes(x=-21, y=1.2),
image = "https://a.espncdn.com/i/teamlogos/nba/500/dal.png",
size = .12) +
annotate("text",
x = -15,
y = 5.5,
label = sim_results |>
filter(team == "DAL") |>
mutate(text = paste0(made_2r*100, "%")) |>
pull(text),
color = "#00843D",
fontface = "bold",
size = 5
) +
annotate("text",
x = -9,
y = 9.5,
label = sim_results |>
filter(team == "DAL") |>
mutate(text = paste0(made_3r*100, "%")) |>
pull(text),
color = "#00843D",
fontface = "bold",
size = 5
) +
annotate("text",
x = -3,
y = -4.5,
label = sim_results |>
filter(team == "DAL") |>
mutate(text = paste0(made_4r*100, "%")) |>
pull(text),
color = "#00843D",
fontface = "bold",
size = 5
) +
annotate("text",
x = 0,
y = 1.5,
label = sim_results |>
filter(team == "DAL") |>
mutate(text = paste0(win_finals*100, "%")) |>
pull(text),
color = "#00843D",
fontface = "bold",
size = 5
) +
annotate("text",
x = 0,
y= 23,
label = "Predicted Probability of\nEach 2024 Playoff Team Advancing",
color = "black",
fontface = "bold",
size = 8) +
geom_image(aes(x=0, y=-16),
image = "https://content.sportslogos.net/logos/6/981/full/2111__nba_playoffs-primary-2018.png",
size = .4) +
theme_void()
ggplot() +
xlim(-25, 25) + ylim(-18, 25) +
geom_segment(aes(x=-3, xend=3, y=0, yend=0), size = 3, color = "#23006a") +
geom_segment(aes(x=-6, xend=0, y=-6, yend=-6), size = 3, color = "#23006a") +
geom_segment(aes(x=0, xend=6, y=6, yend=6), size = 2, color = "black") +
geom_segment(aes(x=-6, xend=-6, y=-8, yend=8), size = 2, color = "black") +
geom_segment(aes(x=-6, xend=-6, y=-5.8, yend=-8.2), size = 3, color = "#23006a") +
geom_segment(aes(x=6, xend=6, y=-8, yend=8), size = 2, color = "black") +
geom_segment(aes(x=-12, xend=-5.95, y=-8, yend=-8), size = 3, color = "#23006a") +
geom_segment(aes(x=-12, xend=-5.95, y=8, yend=8), size = 2, color = "black") +
geom_segment(aes(x=12, xend=5.95, y=8, yend=8), size = 2, color = "black") +
geom_segment(aes(x=12, xend=5.95, y=-8, yend=-8), size = 2, color = "black") +
geom_segment(aes(x=-12, xend=-12, y=4, yend=12), size = 2, color = "black") +
geom_segment(aes(x=-12, xend=-12, y=-12, yend=-4), size = 2, color = "black") +
geom_segment(aes(x=-12, xend=-12, y=-8.2, yend=-3.8), size = 3, color = "#23006a") +
geom_segment(aes(x=12, xend=12, y=4, yend=12), size = 2, color = "black") +
geom_segment(aes(x=12, xend=12, y=-12, yend=-4), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-11.95, y=12, yend=12), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-11.95, y=4, yend=4), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-11.95, y=-12, yend=-12), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-11.95, y=-4, yend=-4), size = 3, color = "#23006a") +
geom_segment(aes(x=18, xend=11.95, y=-12, yend=-12), size = 2, color = "black") +
geom_segment(aes(x=18, xend=11.95, y=-4, yend=-4), size = 2, color = "black") +
geom_segment(aes(x=18, xend=11.95, y=12, yend=12), size = 2, color = "black") +
geom_segment(aes(x=18, xend=11.95, y=4, yend=4), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=1, yend=7), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=9, yend=15), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=-1, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=-9, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=-7.2, yend=-3.8), size = 3, color = "#23006a") +
geom_segment(aes(x=18, xend=18, y=1, yend=7), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=9, yend=15), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=-1, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=-9, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=15, yend=15), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=9, yend=9), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=7, yend=7), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=1, yend=1), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=-15, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=-9, yend=-9), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=-7, yend=-7), size = 3, color = "#23006a") +
geom_segment(aes(x=-24, xend=-17.95, y=-1, yend=-1), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=15, yend=15), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=9, yend=9), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=7, yend=7), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=1, yend=1), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=-15, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=-9, yend=-9), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=-7, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=-1, yend=-1), size = 2, color = "black") +
geom_image(aes(x=-21, y=-7),
image = "https://a.espncdn.com/i/teamlogos/nba/500/phx.png",
size = .15) +
annotate("text",
x = -15,
y = -2.5,
label = sim_results |>
filter(team == "PHX") |>
mutate(text = paste0(made_2r*100, "%")) |>
pull(text),
color = "#e56020",
fontface = "bold",
size = 5
) +
annotate("text",
x = -9,
y = -6.5,
label = sim_results |>
filter(team == "PHX") |>
mutate(text = paste0(made_3r*100, "%")) |>
pull(text),
color = "#e56020",
fontface = "bold",
size = 5
) +
annotate("text",
x = -3,
y = -4.5,
label = sim_results |>
filter(team == "PHX") |>
mutate(text = paste0(made_4r*100, "%")) |>
pull(text),
color = "#e56020",
fontface = "bold",
size = 5
) +
annotate("text",
x = 0,
y = 1.5,
label = sim_results |>
filter(team == "PHX") |>
mutate(text = paste0(win_finals*100, "%")) |>
pull(text),
color = "#e56020",
fontface = "bold",
size = 5
) +
annotate("text",
x = 0,
y= 23,
label = "Predicted Probability of\nEach 2024 Playoff Team Advancing",
color = "black",
fontface = "bold",
size = 8) +
geom_image(aes(x=0, y=-16),
image = "https://content.sportslogos.net/logos/6/981/full/2111__nba_playoffs-primary-2018.png",
size = .4) +
theme_void()
ggplot() +
xlim(-25, 25) + ylim(-18, 25) +
geom_segment(aes(x=-3, xend=3, y=0, yend=0), size = 3, color = "#542582") +
geom_segment(aes(x=-6, xend=0, y=-6, yend=-6), size = 3, color = "#542582") +
geom_segment(aes(x=0, xend=6, y=6, yend=6), size = 2, color = "black") +
geom_segment(aes(x=-6, xend=-6, y=-8, yend=8), size = 2, color = "black") +
geom_segment(aes(x=-6, xend=-6, y=-5.8, yend=-8.2), size = 3, color = "#542582") +
geom_segment(aes(x=6, xend=6, y=-8, yend=8), size = 2, color = "black") +
geom_segment(aes(x=-12, xend=-5.95, y=-8, yend=-8), size = 3, color = "#542582") +
geom_segment(aes(x=-12, xend=-5.95, y=8, yend=8), size = 2, color = "black") +
geom_segment(aes(x=12, xend=5.95, y=8, yend=8), size = 2, color = "black") +
geom_segment(aes(x=12, xend=5.95, y=-8, yend=-8), size = 2, color = "black") +
geom_segment(aes(x=-12, xend=-12, y=4, yend=12), size = 2, color = "black") +
geom_segment(aes(x=-12, xend=-12, y=-12, yend=-4), size = 2, color = "black") +
geom_segment(aes(x=-12, xend=-12, y=-7.8, yend=-12.2), size = 3, color = "#542582") +
geom_segment(aes(x=12, xend=12, y=4, yend=12), size = 2, color = "black") +
geom_segment(aes(x=12, xend=12, y=-12, yend=-4), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-11.95, y=12, yend=12), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-11.95, y=4, yend=4), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-11.95, y=-12, yend=-12), size = 3, color = "#542582") +
geom_segment(aes(x=-18, xend=-11.95, y=-4, yend=-4), size = 2, color = "black") +
geom_segment(aes(x=18, xend=11.95, y=-12, yend=-12), size = 2, color = "black") +
geom_segment(aes(x=18, xend=11.95, y=-4, yend=-4), size = 2, color = "black") +
geom_segment(aes(x=18, xend=11.95, y=12, yend=12), size = 2, color = "black") +
geom_segment(aes(x=18, xend=11.95, y=4, yend=4), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=1, yend=7), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=9, yend=15), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=-1, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=-9, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=-11.8, yend=-15.2), size=3, color = "#542582") +
geom_segment(aes(x=18, xend=18, y=1, yend=7), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=9, yend=15), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=-1, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=-9, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=15, yend=15), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=9, yend=9), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=7, yend=7), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=1, yend=1), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=-15, yend=-15), size = 3, color = "#542582") +
geom_segment(aes(x=-24, xend=-17.95, y=-9, yend=-9), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=-7, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=-1, yend=-1), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=15, yend=15), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=9, yend=9), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=7, yend=7), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=1, yend=1), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=-15, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=-9, yend=-9), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=-7, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=-1, yend=-1), size = 2, color = "black") +
geom_image(aes(x=-21, y=-15),
image = "https://a.espncdn.com/i/teamlogos/nba/500/lal.png",
size = .16) +
annotate("text",
x = -15,
y = -10.5,
label = sim_results |>
filter(team == "LAL") |>
mutate(text = paste0(made_2r*100, "%")) |>
pull(text),
color = "#fdb927",
fontface = "bold",
size = 5
) +
annotate("text",
x = -9,
y = -6.5,
label = sim_results |>
filter(team == "LAL") |>
mutate(text = paste0(made_3r*100, "%")) |>
pull(text),
color = "#fdb927",
fontface = "bold",
size = 5
) +
annotate("text",
x = -3,
y = -4.5,
label = sim_results |>
filter(team == "LAL") |>
mutate(text = paste0(made_4r*100, "%")) |>
pull(text),
color = "#fdb927",
fontface = "bold",
size = 5
) +
annotate("text",
x = 0,
y = 1.5,
label = sim_results |>
filter(team == "LAL") |>
mutate(text = paste0(win_finals*100, "%")) |>
pull(text),
color = "#FDB927",
fontface = "bold",
size = 5
) +
annotate("text",
x = 0,
y= 23,
label = "Predicted Probability of\nEach 2024 Playoff Team Advancing",
color = "black",
fontface = "bold",
size = 8) +
geom_image(aes(x=0, y=-16),
image = "https://content.sportslogos.net/logos/6/981/full/2111__nba_playoffs-primary-2018.png",
size = .4) +
theme_void()
ggplot() +
xlim(-25, 25) + ylim(-18, 25) +
geom_segment(aes(x=-3, xend=3, y=0, yend=0), size = 3, color = "#002a5c") +
geom_segment(aes(x=-6, xend=0, y=-6, yend=-6), size = 3, color = "#002a5c") +
geom_segment(aes(x=0, xend=6, y=6, yend=6), size = 2, color = "black") +
geom_segment(aes(x=-6, xend=-6, y=-8, yend=8), size = 2, color = "black") +
geom_segment(aes(x=-6, xend=-6, y=-6.2, yend=8.2), size = 3, color = "#002a5c") +
geom_segment(aes(x=6, xend=6, y=-8, yend=8), size = 2, color = "black") +
geom_segment(aes(x=-12, xend=-5.95, y=-8, yend=-8), size = 2, color = "black") +
geom_segment(aes(x=-12, xend=-5.95, y=8, yend=8), size = 3, color = "#002a5c") +
geom_segment(aes(x=12, xend=5.95, y=8, yend=8), size = 2, color = "black") +
geom_segment(aes(x=12, xend=5.95, y=-8, yend=-8), size = 2, color = "black") +
geom_segment(aes(x=-12, xend=-12, y=4, yend=12), size = 2, color = "black") +
geom_segment(aes(x=-12, xend=-12, y=7.88, yend=12.2), size = 3, color = "#002a5c") +
geom_segment(aes(x=-12, xend=-12, y=-12, yend=-4), size = 2, color = "black") +
geom_segment(aes(x=12, xend=12, y=4, yend=12), size = 2, color = "black") +
geom_segment(aes(x=12, xend=12, y=-12, yend=-4), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-11.95, y=12, yend=12), size = 3, color = "#002a5c") +
geom_segment(aes(x=-18, xend=-11.95, y=4, yend=4), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-11.95, y=-12, yend=-12), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-11.95, y=-4, yend=-4), size = 2, color = "black") +
geom_segment(aes(x=18, xend=11.95, y=-12, yend=-12), size = 2, color = "black") +
geom_segment(aes(x=18, xend=11.95, y=-4, yend=-4), size = 2, color = "black") +
geom_segment(aes(x=18, xend=11.95, y=12, yend=12), size = 2, color = "black") +
geom_segment(aes(x=18, xend=11.95, y=4, yend=4), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=1, yend=7), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=9, yend=15), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=12.2, yend=8.8), size = 3, color = "#002a5c") +
geom_segment(aes(x=-18, xend=-18, y=-1, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=-9, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=1, yend=7), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=9, yend=15), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=-1, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=-9, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=15, yend=15), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=9, yend=9), size = 3, color = "#002a5c") +
geom_segment(aes(x=-24, xend=-17.95, y=7, yend=7), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=1, yend=1), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=-15, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=-9, yend=-9), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=-7, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=-1, yend=-1), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=15, yend=15), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=9, yend=9), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=7, yend=7), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=1, yend=1), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=-15, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=-9, yend=-9), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=-7, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=-1, yend=-1), size = 2, color = "black") +
geom_image(aes(x=-21, y=9),
image = "https://a.espncdn.com/i/teamlogos/nba/500/no.png",
size = .17) +
annotate("text",
x = -15,
y = 13.5,
label = sim_results |>
filter(team == "NOP") |>
mutate(text = paste0(made_2r*100, "%")) |>
pull(text),
color = "#b4975a",
fontface = "bold",
size = 5
) +
annotate("text",
x = -9,
y = 9.5,
label = sim_results |>
filter(team == "NOP") |>
mutate(text = paste0(made_3r*100, "%")) |>
pull(text),
color = "#b4975a",
fontface = "bold",
size = 5
) +
annotate("text",
x = -3,
y = -4.5,
label = sim_results |>
filter(team == "NOP") |>
mutate(text = paste0(made_4r*100, "%")) |>
pull(text),
color = "#b4975a",
fontface = "bold",
size = 5
) +
annotate("text",
x = 0,
y = 1.5,
label = sim_results |>
filter(team == "NOP") |>
mutate(text = paste0(win_finals*100, "%")) |>
pull(text),
color = "#b4975a",
fontface = "bold",
size = 5
) +
annotate("text",
x = 0,
y= 23,
label = "Predicted Probability of\nEach 2024 Playoff Team Advancing",
color = "black",
fontface = "bold",
size = 8) +
geom_image(aes(x=0, y=-16),
image = "https://content.sportslogos.net/logos/6/981/full/2111__nba_playoffs-primary-2018.png",
size = .4) +
theme_void()
ggplot() +
xlim(-25, 25) + ylim(-18, 25) +
geom_segment(aes(x=-3, xend=3, y=0, yend=0), size = 3, color = "#006532") +
geom_segment(aes(x=-6, xend=0, y=-6, yend=-6), size = 2, color = "black") +
geom_segment(aes(x=0, xend=6, y=6, yend=6), size = 3, color = "#006532") +
geom_segment(aes(x=-6, xend=-6, y=-8, yend=8), size = 2, color = "black") +
geom_segment(aes(x=6, xend=6, y=-8, yend=8), size = 2, color = "black") +
geom_segment(aes(x=6, xend=6, y=5.8, yend=8.2), size = 3, color = "#006532") +
geom_segment(aes(x=-12, xend=-5.95, y=-8, yend=-8), size = 2, color = "black") +
geom_segment(aes(x=-12, xend=-5.95, y=8, yend=8), size = 2, color = "black") +
geom_segment(aes(x=12, xend=5.95, y=8, yend=8), size = 3, color = "#006532") +
geom_segment(aes(x=12, xend=5.95, y=-8, yend=-8), size = 2, color = "black") +
geom_segment(aes(x=-12, xend=-12, y=4, yend=12), size = 2, color = "black") +
geom_segment(aes(x=-12, xend=-12, y=-12, yend=-4), size = 2, color = "black") +
geom_segment(aes(x=12, xend=12, y=4, yend=12), size = 2, color = "black") +
geom_segment(aes(x=12, xend=12, y=7.88, yend=12.2), size = 3, color = "#006532") +
geom_segment(aes(x=12, xend=12, y=-12, yend=-4), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-11.95, y=12, yend=12), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-11.95, y=4, yend=4), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-11.95, y=-12, yend=-12), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-11.95, y=-4, yend=-4), size = 2, color = "black") +
geom_segment(aes(x=18, xend=11.95, y=-12, yend=-12), size = 2, color = "black") +
geom_segment(aes(x=18, xend=11.95, y=-4, yend=-4), size = 2, color = "black") +
geom_segment(aes(x=18, xend=11.95, y=12, yend=12), size = 3, color = "#006532") +
geom_segment(aes(x=18, xend=11.95, y=4, yend=4), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=1, yend=7), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=9, yend=15), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=-1, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=-9, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=1, yend=7), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=9, yend=15), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=-1, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=-9, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=11.8, yend=15.2), size = 3, color = "#006532") +
geom_segment(aes(x=-24, xend=-17.95, y=15, yend=15), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=9, yend=9), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=7, yend=7), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=1, yend=1), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=-15, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=-9, yend=-9), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=-7, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=-1, yend=-1), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=15, yend=15), size = 3, color = "#006532") +
geom_segment(aes(x=24, xend=17.95, y=9, yend=9), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=7, yend=7), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=1, yend=1), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=-15, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=-9, yend=-9), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=-7, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=-1, yend=-1), size = 2, color = "black") +
geom_image(aes(x=21, y=15),
image = "https://a.espncdn.com/i/teamlogos/nba/500/bos.png",
size = .12) +
annotate("text",
x = 15,
y = 13.5,
label = sim_results |>
filter(team == "BOS") |>
mutate(text = paste0(made_2r*100, "%")) |>
pull(text),
color = "darkgrey",
fontface = "bold",
size = 5
) +
annotate("text",
x = 9,
y = 9.5,
label = sim_results |>
filter(team == "BOS") |>
mutate(text = paste0(made_3r*100, "%")) |>
pull(text),
color = "darkgrey",
fontface = "bold",
size = 5
) +
annotate("text",
x = 3,
y = 7.5,
label = sim_results |>
filter(team == "BOS") |>
mutate(text = paste0(made_4r*100, "%")) |>
pull(text),
color = "darkgrey",
fontface = "bold",
size = 5
) +
annotate("text",
x = 0,
y = 1.5,
label = sim_results |>
filter(team == "BOS") |>
mutate(text = paste0(win_finals*100, "%")) |>
pull(text),
color = "darkgrey",
fontface = "bold",
size = 5
) +
annotate("text",
x = 0,
y= 23,
label = "Predicted Probability of\nEach 2024 Playoff Team Advancing",
color = "black",
fontface = "bold",
size = 8) +
geom_image(aes(x=0, y=-16),
image = "https://content.sportslogos.net/logos/6/981/full/2111__nba_playoffs-primary-2018.png",
size = .4) +
theme_void()
ggplot() +
xlim(-25, 25) + ylim(-18, 25) +
geom_segment(aes(x=-3, xend=3, y=0, yend=0), size = 3, color = "#225EA8") +
geom_segment(aes(x=-6, xend=0, y=-6, yend=-6), size = 2, color = "black") +
geom_segment(aes(x=0, xend=6, y=6, yend=6), size = 3, color = "#225EA8") +
geom_segment(aes(x=-6, xend=-6, y=-8, yend=8), size = 2, color = "black") +
geom_segment(aes(x=6, xend=6, y=-8, yend=8), size = 2, color = "black") +
geom_segment(aes(x=6, xend=6, y=6.2, yend=-8.2), size = 3, color = "#225EA8") +
geom_segment(aes(x=-12, xend=-5.95, y=-8, yend=-8), size = 2, color = "black") +
geom_segment(aes(x=-12, xend=-5.95, y=8, yend=8), size = 2, color = "black") +
geom_segment(aes(x=12, xend=5.95, y=8, yend=8), size = 2, color = "black") +
geom_segment(aes(x=12, xend=5.95, y=-8, yend=-8), size = 3, color = "#225EA8") +
geom_segment(aes(x=-12, xend=-12, y=4, yend=12), size = 2, color = "black") +
geom_segment(aes(x=-12, xend=-12, y=-12, yend=-4), size = 2, color = "black") +
geom_segment(aes(x=12, xend=12, y=4, yend=12), size = 2, color = "black") +
geom_segment(aes(x=12, xend=12, y=-12, yend=-4), size = 2, color = "black") +
geom_segment(aes(x=12, xend=12, y=-7.8, yend=-12.2), size = 3, color = "#225EA8") +
geom_segment(aes(x=-18, xend=-11.95, y=12, yend=12), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-11.95, y=4, yend=4), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-11.95, y=-12, yend=-12), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-11.95, y=-4, yend=-4), size = 2, color = "black") +
geom_segment(aes(x=18, xend=11.95, y=-12, yend=-12), size = 3, color = "#0860A8") +
geom_segment(aes(x=18, xend=11.95, y=-4, yend=-4), size = 2, color = "black") +
geom_segment(aes(x=18, xend=11.95, y=12, yend=12), size = 2, color = "black") +
geom_segment(aes(x=18, xend=11.95, y=4, yend=4), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=1, yend=7), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=9, yend=15), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=-1, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=-9, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=1, yend=7), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=9, yend=15), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=-1, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=-9, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=-12.2, yend=-8.8), size = 3, color = "#0860A8") +
geom_segment(aes(x=-24, xend=-17.95, y=15, yend=15), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=9, yend=9), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=7, yend=7), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=1, yend=1), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=-15, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=-9, yend=-9), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=-7, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=-1, yend=-1), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=15, yend=15), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=9, yend=9), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=7, yend=7), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=1, yend=1), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=-15, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=-9, yend=-9), size = 3, color = "#0860A8") +
geom_segment(aes(x=24, xend=17.95, y=-7, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=-1, yend=-1), size = 2, color = "black") +
geom_image(aes(x=21, y=-9.5),
image = "https://a.espncdn.com/i/teamlogos/nba/500/nyk.png",
size = .12) +
annotate("text",
x = 15,
y = -10.5,
label = sim_results |>
filter(team == "NYK") |>
mutate(text = paste0(made_2r*100, "%")) |>
pull(text),
color = "#f58426",
fontface = "bold",
size = 5
) +
annotate("text",
x = 9,
y = -6.5,
label = sim_results |>
filter(team == "NYK") |>
mutate(text = paste0(made_3r*100, "%")) |>
pull(text),
color = "#f58426",
fontface = "bold",
size = 5
) +
annotate("text",
x = 3,
y = 7.5,
label = sim_results |>
filter(team == "NYK") |>
mutate(text = paste0(made_4r*100, "%")) |>
pull(text),
color = "#f58426",
fontface = "bold",
size = 5
) +
annotate("text",
x = 0,
y = 1.5,
label = sim_results |>
filter(team == "NYK") |>
mutate(text = paste0(win_finals*100, "%")) |>
pull(text),
color = "#f58426",
fontface = "bold",
size = 5
) +
annotate("text",
x = 0,
y= 23,
label = "Predicted Probability of\nEach 2024 Playoff Team Advancing",
color = "black",
fontface = "bold",
size = 8) +
geom_image(aes(x=0, y=-16),
image = "https://content.sportslogos.net/logos/6/981/full/2111__nba_playoffs-primary-2018.png",
size = .4) +
theme_void()
ggplot() +
xlim(-25, 25) + ylim(-18, 25) +
geom_segment(aes(x=-3, xend=3, y=0, yend=0), size = 3, color = "#003813") +
geom_segment(aes(x=-6, xend=0, y=-6, yend=-6), size = 2, color = "black") +
geom_segment(aes(x=0, xend=6, y=6, yend=6), size = 3, color = "#003813") +
geom_segment(aes(x=-6, xend=-6, y=-8, yend=8), size = 2, color = "black") +
geom_segment(aes(x=6, xend=6, y=-8, yend=8), size = 2, color = "black") +
geom_segment(aes(x=6, xend=6, y=6.2, yend=-8.2), size = 3, color = "#003813") +
geom_segment(aes(x=-12, xend=-5.95, y=-8, yend=-8), size = 2, color = "black") +
geom_segment(aes(x=-12, xend=-5.95, y=8, yend=8), size = 2, color = "black") +
geom_segment(aes(x=12, xend=5.95, y=8, yend=8), size = 2, color = "black") +
geom_segment(aes(x=12, xend=5.95, y=-8, yend=-8), size = 3, color = "#003813") +
geom_segment(aes(x=-12, xend=-12, y=4, yend=12), size = 2, color = "black") +
geom_segment(aes(x=-12, xend=-12, y=-12, yend=-4), size = 2, color = "black") +
geom_segment(aes(x=12, xend=12, y=4, yend=12), size = 2, color = "black") +
geom_segment(aes(x=12, xend=12, y=-12, yend=-4), size = 2, color = "black") +
geom_segment(aes(x=12, xend=12, y=-8.2, yend=-3.8), size = 3, color = "#003813") +
geom_segment(aes(x=-18, xend=-11.95, y=12, yend=12), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-11.95, y=4, yend=4), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-11.95, y=-12, yend=-12), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-11.95, y=-4, yend=-4), size = 2, color = "black") +
geom_segment(aes(x=18, xend=11.95, y=-12, yend=-12), size = 2, color = "black") +
geom_segment(aes(x=18, xend=11.95, y=-4, yend=-4), size = 3, color = "#003813") +
geom_segment(aes(x=18, xend=11.95, y=12, yend=12), size = 2, color = "black") +
geom_segment(aes(x=18, xend=11.95, y=4, yend=4), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=1, yend=7), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=9, yend=15), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=-1, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=-9, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=1, yend=7), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=9, yend=15), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=-1, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=-.8, yend=-4.2), size = 3, color = "#003813") +
geom_segment(aes(x=18, xend=18, y=-9, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=15, yend=15), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=9, yend=9), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=7, yend=7), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=1, yend=1), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=-15, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=-9, yend=-9), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=-7, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=-1, yend=-1), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=15, yend=15), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=9, yend=9), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=7, yend=7), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=1, yend=1), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=-15, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=-9, yend=-9), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=-7, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=-1, yend=-1), size = 3, color = "#003813") +
geom_image(aes(x=21, y=-1),
image = "https://a.espncdn.com/i/teamlogos/nba/500/mil.png",
size = .12) +
annotate("text",
x = 15,
y = -2.5,
label = sim_results |>
filter(team == "MIL") |>
mutate(text = paste0(made_2r*100, "%")) |>
pull(text),
color = "#0077C0",
fontface = "bold",
size = 5
) +
annotate("text",
x = 9,
y = -6.5,
label = sim_results |>
filter(team == "MIL") |>
mutate(text = paste0(made_3r*100, "%")) |>
pull(text),
color = "#0077C0",
fontface = "bold",
size = 5
) +
annotate("text",
x = 3,
y = 7.5,
label = sim_results |>
filter(team == "MIL") |>
mutate(text = paste0(made_4r*100, "%")) |>
pull(text),
color = "#0077C0",
fontface = "bold",
size = 5
) +
annotate("text",
x = 0,
y = 1.5,
label = sim_results |>
filter(team == "MIL") |>
mutate(text = paste0(win_finals*100, "%")) |>
pull(text),
color = "#0077C0",
fontface = "bold",
size = 5
) +
annotate("text",
x = 0,
y= 23,
label = "Predicted Probability of\nEach 2024 Playoff Team Advancing",
color = "black",
fontface = "bold",
size = 8) +
geom_image(aes(x=0, y=-16),
image = "https://content.sportslogos.net/logos/6/981/full/2111__nba_playoffs-primary-2018.png",
size = .4) +
theme_void()
ggplot() +
xlim(-25, 25) + ylim(-18, 25) +
geom_segment(aes(x=-3, xend=3, y=0, yend=0), size = 3, color = "#860038") +
geom_segment(aes(x=-6, xend=0, y=-6, yend=-6), size = 2, color = "black") +
geom_segment(aes(x=0, xend=6, y=6, yend=6), size = 3, color = "#860038") +
geom_segment(aes(x=-6, xend=-6, y=-8, yend=8), size = 2, color = "black") +
geom_segment(aes(x=6, xend=6, y=-8, yend=8), size = 2, color = "black") +
geom_segment(aes(x=6, xend=6, y=5.8, yend=8.2), size = 3, color = "#860038") +
geom_segment(aes(x=-12, xend=-5.95, y=-8, yend=-8), size = 2, color = "black") +
geom_segment(aes(x=-12, xend=-5.95, y=8, yend=8), size = 2, color = "black") +
geom_segment(aes(x=12, xend=5.95, y=8, yend=8), size = 3, color = "#860038") +
geom_segment(aes(x=12, xend=5.95, y=-8, yend=-8), size = 2, color = "black") +
geom_segment(aes(x=-12, xend=-12, y=4, yend=12), size = 2, color = "black") +
geom_segment(aes(x=-12, xend=-12, y=-12, yend=-4), size = 2, color = "black") +
geom_segment(aes(x=12, xend=12, y=4, yend=12), size = 2, color = "black") +
geom_segment(aes(x=12, xend=12, y=8.2, yend=3.8), size = 3, color = "#860038") +
geom_segment(aes(x=12, xend=12, y=-12, yend=-4), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-11.95, y=12, yend=12), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-11.95, y=4, yend=4), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-11.95, y=-12, yend=-12), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-11.95, y=-4, yend=-4), size = 2, color = "black") +
geom_segment(aes(x=18, xend=11.95, y=-12, yend=-12), size = 2, color = "black") +
geom_segment(aes(x=18, xend=11.95, y=-4, yend=-4), size = 2, color = "black") +
geom_segment(aes(x=18, xend=11.95, y=12, yend=12), size = 2, color = "black") +
geom_segment(aes(x=18, xend=11.95, y=4, yend=4), size = 3, color = "#860038") +
geom_segment(aes(x=-18, xend=-18, y=1, yend=7), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=9, yend=15), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=-1, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=-9, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=1, yend=7), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=3.8, yend=7.2), size = 3, color = "#860038") +
geom_segment(aes(x=18, xend=18, y=9, yend=15), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=-1, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=-9, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=15, yend=15), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=9, yend=9), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=7, yend=7), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=1, yend=1), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=-15, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=-9, yend=-9), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=-7, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=-1, yend=-1), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=15, yend=15), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=9, yend=9), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=7, yend=7), size = 3, color = "#860038") +
geom_segment(aes(x=24, xend=17.95, y=1, yend=1), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=-15, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=-9, yend=-9), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=-7, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=-1, yend=-1), size = 2, color = "black") +
geom_image(aes(x=21, y=7),
image = "https://a.espncdn.com/i/teamlogos/nba/500/cle.png",
size = .12) +
annotate("text",
x = 15,
y = 5.5,
label = sim_results |>
filter(team == "CLE") |>
mutate(text = paste0(made_2r*100, "%")) |>
pull(text),
color = "#fdbb30",
fontface = "bold",
size = 5
) +
annotate("text",
x = 9,
y = 9.5,
label = sim_results |>
filter(team == "CLE") |>
mutate(text = paste0(made_3r*100, "%")) |>
pull(text),
color = "#fdbb30",
fontface = "bold",
size = 5
) +
annotate("text",
x = 3,
y = 7.5,
label = sim_results |>
filter(team == "CLE") |>
mutate(text = paste0(made_4r*100, "%")) |>
pull(text),
color = "#fdbb30",
fontface = "bold",
size = 5
) +
annotate("text",
x = 0,
y = 1.5,
label = sim_results |>
filter(team == "CLE") |>
mutate(text = paste0(win_finals*100, "%")) |>
pull(text),
color = "#fdbb30",
fontface = "bold",
size = 5
) +
annotate("text",
x = 0,
y= 23,
label = "Predicted Probability of\nEach 2024 Playoff Team Advancing",
color = "black",
fontface = "bold",
size = 8) +
geom_image(aes(x=0, y=-16),
image = "https://content.sportslogos.net/logos/6/981/full/2111__nba_playoffs-primary-2018.png",
size = .4) +
theme_void()
ggplot() +
xlim(-25, 25) + ylim(-18, 25) +
geom_segment(aes(x=-3, xend=3, y=0, yend=0), size = 3, color = "#0860A8") +
geom_segment(aes(x=-6, xend=0, y=-6, yend=-6), size = 2, color = "black") +
geom_segment(aes(x=0, xend=6, y=6, yend=6), size = 3, color = "#0860A8") +
geom_segment(aes(x=-6, xend=-6, y=-8, yend=8), size = 2, color = "black") +
geom_segment(aes(x=6, xend=6, y=-8, yend=8), size = 2, color = "black") +
geom_segment(aes(x=6, xend=6, y=5.8, yend=8.2), size = 3, color = "#0860A8") +
geom_segment(aes(x=-12, xend=-5.95, y=-8, yend=-8), size = 2, color = "black") +
geom_segment(aes(x=-12, xend=-5.95, y=8, yend=8), size = 2, color = "black") +
geom_segment(aes(x=12, xend=5.95, y=8, yend=8), size = 3, color = "#0860A8") +
geom_segment(aes(x=12, xend=5.95, y=-8, yend=-8), size = 2, color = "black") +
geom_segment(aes(x=-12, xend=-12, y=4, yend=12), size = 2, color = "black") +
geom_segment(aes(x=-12, xend=-12, y=-12, yend=-4), size = 2, color = "black") +
geom_segment(aes(x=12, xend=12, y=4, yend=12), size = 2, color = "black") +
geom_segment(aes(x=12, xend=12, y=8.2, yend=3.8), size = 3, color = "#0860A8") +
geom_segment(aes(x=12, xend=12, y=-12, yend=-4), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-11.95, y=12, yend=12), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-11.95, y=4, yend=4), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-11.95, y=-12, yend=-12), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-11.95, y=-4, yend=-4), size = 2, color = "black") +
geom_segment(aes(x=18, xend=11.95, y=-12, yend=-12), size = 2, color = "black") +
geom_segment(aes(x=18, xend=11.95, y=-4, yend=-4), size = 2, color = "black") +
geom_segment(aes(x=18, xend=11.95, y=12, yend=12), size = 2, color = "black") +
geom_segment(aes(x=18, xend=11.95, y=4, yend=4), size = 3, color = "#0860A8") +
geom_segment(aes(x=-18, xend=-18, y=1, yend=7), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=9, yend=15), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=-1, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=-9, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=1, yend=7), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=4.2, yend=.8), size = 3, color = "#0860A8") +
geom_segment(aes(x=18, xend=18, y=9, yend=15), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=-1, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=-9, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=15, yend=15), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=9, yend=9), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=7, yend=7), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=1, yend=1), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=-15, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=-9, yend=-9), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=-7, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=-1, yend=-1), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=15, yend=15), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=9, yend=9), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=7, yend=7), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=1, yend=1), size = 3, color = "#0860A8") +
geom_segment(aes(x=24, xend=17.95, y=-15, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=-9, yend=-9), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=-7, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=-1, yend=-1), size = 2, color = "black") +
geom_image(aes(x=21, y=1),
image = "https://a.espncdn.com/i/teamlogos/nba/500/orl.png",
size = .15) +
annotate("text",
x = 15,
y = 5.5,
label = sim_results |>
filter(team == "ORL") |>
mutate(text = paste0(made_2r*100, "%")) |>
pull(text),
color = "black",
fontface = "bold",
size = 5
) +
annotate("text",
x = 9,
y = 9.5,
label = sim_results |>
filter(team == "ORL") |>
mutate(text = paste0(made_3r*100, "%")) |>
pull(text),
color = "black",
fontface = "bold",
size = 5
) +
annotate("text",
x = 3,
y = 7.5,
label = sim_results |>
filter(team == "ORL") |>
mutate(text = paste0(made_4r*100, "%")) |>
pull(text),
color = "black",
fontface = "bold",
size = 5
) +
annotate("text",
x = 0,
y = 1.5,
label = sim_results |>
filter(team == "ORL") |>
mutate(text = paste0(win_finals*100, "%")) |>
pull(text),
color = "black",
fontface = "bold",
size = 5
) +
annotate("text",
x = 0,
y= 23,
label = "Predicted Probability of\nEach 2024 Playoff Team Advancing",
color = "black",
fontface = "bold",
size = 8) +
geom_image(aes(x=0, y=-16),
image = "https://content.sportslogos.net/logos/6/981/full/2111__nba_playoffs-primary-2018.png",
size = .4) +
theme_void()
ggplot() +
xlim(-25, 25) + ylim(-18, 25) +
geom_segment(aes(x=-3, xend=3, y=0, yend=0), size = 3, color = "#061642") +
geom_segment(aes(x=-6, xend=0, y=-6, yend=-6), size = 2, color = "black") +
geom_segment(aes(x=0, xend=6, y=6, yend=6), size = 3, color = "#061642") +
geom_segment(aes(x=-6, xend=-6, y=-8, yend=8), size = 2, color = "black") +
geom_segment(aes(x=6, xend=6, y=-8, yend=8), size = 2, color = "black") +
geom_segment(aes(x=6, xend=6, y=6.2, yend=-8.2), size = 3, color = "#061642") +
geom_segment(aes(x=-12, xend=-5.95, y=-8, yend=-8), size = 2, color = "black") +
geom_segment(aes(x=-12, xend=-5.95, y=8, yend=8), size = 2, color = "black") +
geom_segment(aes(x=12, xend=5.95, y=8, yend=8), size = 2, color = "black") +
geom_segment(aes(x=12, xend=5.95, y=-8, yend=-8), size = 3, color = "#061642") +
geom_segment(aes(x=-12, xend=-12, y=4, yend=12), size = 2, color = "black") +
geom_segment(aes(x=-12, xend=-12, y=-12, yend=-4), size = 2, color = "black") +
geom_segment(aes(x=12, xend=12, y=4, yend=12), size = 2, color = "black") +
geom_segment(aes(x=12, xend=12, y=-12, yend=-4), size = 2, color = "black") +
geom_segment(aes(x=12, xend=12, y=-8.2, yend=-3.8), size = 3, color = "#061642") +
geom_segment(aes(x=-18, xend=-11.95, y=12, yend=12), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-11.95, y=4, yend=4), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-11.95, y=-12, yend=-12), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-11.95, y=-4, yend=-4), size = 2, color = "black") +
geom_segment(aes(x=18, xend=11.95, y=-12, yend=-12), size = 2, color = "black") +
geom_segment(aes(x=18, xend=11.95, y=-4, yend=-4), size = 3, color = "#061642") +
geom_segment(aes(x=18, xend=11.95, y=12, yend=12), size = 2, color = "black") +
geom_segment(aes(x=18, xend=11.95, y=4, yend=4), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=1, yend=7), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=9, yend=15), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=-1, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=-9, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=1, yend=7), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=9, yend=15), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=-1, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=-3.8, yend=-7.2), size = 3, color = "#061642") +
geom_segment(aes(x=18, xend=18, y=-9, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=15, yend=15), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=9, yend=9), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=7, yend=7), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=1, yend=1), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=-15, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=-9, yend=-9), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=-7, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=-1, yend=-1), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=15, yend=15), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=9, yend=9), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=7, yend=7), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=1, yend=1), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=-15, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=-9, yend=-9), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=-7, yend=-7), size = 3, color = "#061642") +
geom_segment(aes(x=24, xend=17.95, y=-1, yend=-1), size = 2, color = "black") +
geom_image(aes(x=21, y=-7),
image = "https://a.espncdn.com/i/teamlogos/nba/500/ind.png",
size = .11) +
annotate("text",
x = 15,
y = -2.5,
label = sim_results |>
filter(team == "IND") |>
mutate(text = paste0(made_2r*100, "%")) |>
pull(text),
color = "#FDBB30",
fontface = "bold",
size = 5
) +
annotate("text",
x = 9,
y = -6.5,
label = sim_results |>
filter(team == "IND") |>
mutate(text = paste0(made_3r*100, "%")) |>
pull(text),
color = "#FDBB30",
fontface = "bold",
size = 5
) +
annotate("text",
x = 3,
y = 7.5,
label = sim_results |>
filter(team == "IND") |>
mutate(text = paste0(made_4r*100, "%")) |>
pull(text),
color = "#FDBB30",
fontface = "bold",
size = 5
) +
annotate("text",
x = 0,
y = 1.5,
label = sim_results |>
filter(team == "IND") |>
mutate(text = paste0(win_finals*100, "%")) |>
pull(text),
color = "#FDBB30",
fontface = "bold",
size = 5
) +
annotate("text",
x = 0,
y= 23,
label = "Predicted Probability of\nEach 2024 Playoff Team Advancing",
color = "black",
fontface = "bold",
size = 8) +
geom_image(aes(x=0, y=-16),
image = "https://content.sportslogos.net/logos/6/981/full/2111__nba_playoffs-primary-2018.png",
size = .4) +
theme_void()
ggplot() +
xlim(-25, 25) + ylim(-18, 25) +
geom_segment(aes(x=-3, xend=3, y=0, yend=0), size = 3, color = "#006BB6") +
geom_segment(aes(x=-6, xend=0, y=-6, yend=-6), size = 2, color = "black") +
geom_segment(aes(x=0, xend=6, y=6, yend=6), size = 3, color = "#006BB6") +
geom_segment(aes(x=-6, xend=-6, y=-8, yend=8), size = 2, color = "black") +
geom_segment(aes(x=6, xend=6, y=-8, yend=8), size = 2, color = "black") +
geom_segment(aes(x=6, xend=6, y=6.2, yend=-8.2), size = 3, color = "#006BB6") +
geom_segment(aes(x=-12, xend=-5.95, y=-8, yend=-8), size = 2, color = "black") +
geom_segment(aes(x=-12, xend=-5.95, y=8, yend=8), size = 2, color = "black") +
geom_segment(aes(x=12, xend=5.95, y=8, yend=8), size = 2, color = "black") +
geom_segment(aes(x=12, xend=5.95, y=-8, yend=-8), size = 3, color = "#006BB6") +
geom_segment(aes(x=-12, xend=-12, y=4, yend=12), size = 2, color = "black") +
geom_segment(aes(x=-12, xend=-12, y=-12, yend=-4), size = 2, color = "black") +
geom_segment(aes(x=12, xend=12, y=4, yend=12), size = 2, color = "black") +
geom_segment(aes(x=12, xend=12, y=-12, yend=-4), size = 2, color = "black") +
geom_segment(aes(x=12, xend=12, y=-7.8, yend=-12.2), size = 3, color = "#006BB6") +
geom_segment(aes(x=-18, xend=-11.95, y=12, yend=12), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-11.95, y=4, yend=4), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-11.95, y=-12, yend=-12), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-11.95, y=-4, yend=-4), size = 2, color = "black") +
geom_segment(aes(x=18, xend=11.95, y=-12, yend=-12), size = 3, color = "#006BB6") +
geom_segment(aes(x=18, xend=11.95, y=-4, yend=-4), size = 2, color = "black") +
geom_segment(aes(x=18, xend=11.95, y=12, yend=12), size = 2, color = "black") +
geom_segment(aes(x=18, xend=11.95, y=4, yend=4), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=1, yend=7), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=9, yend=15), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=-1, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=-9, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=1, yend=7), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=9, yend=15), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=-1, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=-9, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=-11.8, yend=-15.2), size = 3, color = "#006BB6") +
geom_segment(aes(x=-24, xend=-17.95, y=15, yend=15), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=9, yend=9), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=7, yend=7), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=1, yend=1), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=-15, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=-9, yend=-9), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=-7, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=-1, yend=-1), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=15, yend=15), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=9, yend=9), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=7, yend=7), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=1, yend=1), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=-15, yend=-15), size = 3, color = "#006BB6") +
geom_segment(aes(x=24, xend=17.95, y=-9, yend=-9), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=-7, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=-1, yend=-1), size = 2, color = "black") +
geom_image(aes(x=21, y=-14.5),
image = "https://a.espncdn.com/i/teamlogos/nba/500/phi.png",
size = .12) +
annotate("text",
x = 15,
y = -10.5,
label = sim_results |>
filter(team == "PHI") |>
mutate(text = paste0(made_2r*100, "%")) |>
pull(text),
color = "#ED174C",
fontface = "bold",
size = 5
) +
annotate("text",
x = 9,
y = -6.5,
label = sim_results |>
filter(team == "PHI") |>
mutate(text = paste0(made_3r*100, "%")) |>
pull(text),
color = "#ED174C",
fontface = "bold",
size = 5
) +
annotate("text",
x = 3,
y = 7.5,
label = sim_results |>
filter(team == "PHI") |>
mutate(text = paste0(made_4r*100, "%")) |>
pull(text),
color = "#ED174C",
fontface = "bold",
size = 5
) +
annotate("text",
x = 0,
y = 1.5,
label = sim_results |>
filter(team == "PHI") |>
mutate(text = paste0(win_finals*100, "%")) |>
pull(text),
color = "#ED174C",
fontface = "bold",
size = 5
) +
annotate("text",
x = 0,
y= 23,
label = "Predicted Probability of\nEach 2024 Playoff Team Advancing",
color = "black",
fontface = "bold",
size = 8) +
geom_image(aes(x=0, y=-16),
image = "https://content.sportslogos.net/logos/6/981/full/2111__nba_playoffs-primary-2018.png",
size = .4) +
theme_void()
ggplot() +
xlim(-25, 25) + ylim(-18, 25) +
geom_segment(aes(x=-3, xend=3, y=0, yend=0), size = 3, color = "#98002E") +
geom_segment(aes(x=-6, xend=0, y=-6, yend=-6), size = 2, color = "black") +
geom_segment(aes(x=0, xend=6, y=6, yend=6), size = 3, color = "#98002E") +
geom_segment(aes(x=-6, xend=-6, y=-8, yend=8), size = 2, color = "black") +
geom_segment(aes(x=6, xend=6, y=-8, yend=8), size = 2, color = "black") +
geom_segment(aes(x=6, xend=6, y=5.8, yend=8.2), size = 3, color = "#98002E") +
geom_segment(aes(x=-12, xend=-5.95, y=-8, yend=-8), size = 2, color = "black") +
geom_segment(aes(x=-12, xend=-5.95, y=8, yend=8), size = 2, color = "black") +
geom_segment(aes(x=12, xend=5.95, y=8, yend=8), size = 3, color = "#98002E") +
geom_segment(aes(x=12, xend=5.95, y=-8, yend=-8), size = 2, color = "black") +
geom_segment(aes(x=-12, xend=-12, y=4, yend=12), size = 2, color = "black") +
geom_segment(aes(x=-12, xend=-12, y=-12, yend=-4), size = 2, color = "black") +
geom_segment(aes(x=12, xend=12, y=4, yend=12), size = 2, color = "black") +
geom_segment(aes(x=12, xend=12, y=7.88, yend=12.2), size = 3, color = "#98002E") +
geom_segment(aes(x=12, xend=12, y=-12, yend=-4), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-11.95, y=12, yend=12), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-11.95, y=4, yend=4), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-11.95, y=-12, yend=-12), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-11.95, y=-4, yend=-4), size = 2, color = "black") +
geom_segment(aes(x=18, xend=11.95, y=-12, yend=-12), size = 2, color = "black") +
geom_segment(aes(x=18, xend=11.95, y=-4, yend=-4), size = 2, color = "black") +
geom_segment(aes(x=18, xend=11.95, y=12, yend=12), size = 3, color = "#98002E") +
geom_segment(aes(x=18, xend=11.95, y=4, yend=4), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=1, yend=7), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=9, yend=15), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=-1, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=-18, xend=-18, y=-9, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=1, yend=7), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=9, yend=15), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=-1, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=-9, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=18, xend=18, y=12.2, yend=8.8), size = 3, color = "#98002E") +
geom_segment(aes(x=-24, xend=-17.95, y=15, yend=15), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=9, yend=9), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=7, yend=7), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=1, yend=1), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=-15, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=-9, yend=-9), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=-7, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=-24, xend=-17.95, y=-1, yend=-1), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=15, yend=15), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=9, yend=9), size = 2, color = "#98002E") +
geom_segment(aes(x=24, xend=17.95, y=7, yend=7), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=1, yend=1), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=-15, yend=-15), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=-9, yend=-9), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=-7, yend=-7), size = 2, color = "black") +
geom_segment(aes(x=24, xend=17.95, y=-1, yend=-1), size = 2, color = "black") +
geom_image(aes(x=21, y=10),
image = "https://a.espncdn.com/i/teamlogos/nba/500/mia.png",
size = .11) +
annotate("text",
x = 15,
y = 13.5,
label = sim_results |>
filter(team == "MIA") |>
mutate(text = paste0(made_2r*100, "%")) |>
pull(text),
color = "#F9A01B",
fontface = "bold",
size = 5
) +
annotate("text",
x = 9,
y = 9.5,
label = sim_results |>
filter(team == "MIA") |>
mutate(text = paste0(made_3r*100, "%")) |>
pull(text),
color = "#F9A01B",
fontface = "bold",
size = 5
) +
annotate("text",
x = 3,
y = 7.5,
label = sim_results |>
filter(team == "MIA") |>
mutate(text = paste0(made_4r*100, "%")) |>
pull(text),
color = "#F9A01B",
fontface = "bold",
size = 5
) +
annotate("text",
x = 0,
y = 1.5,
label = sim_results |>
filter(team == "MIA") |>
mutate(text = paste0(win_finals*100, "%")) |>
pull(text),
color = "#F9A01B",
fontface = "bold",
size = 5
) +
annotate("text",
x = 0,
y= 23,
label = "Predicted Probability of\nEach 2024 Playoff Team Advancing",
color = "black",
fontface = "bold",
size = 8) +
geom_image(aes(x=0, y=-16),
image = "https://content.sportslogos.net/logos/6/981/full/2111__nba_playoffs-primary-2018.png",
size = .4) +
theme_void()
t1 <- sim_results |>
filter(row_number() <= 8) |>
arrange(desc(win_finals)) |>
select(url, made_2r, made_3r, made_4r, win_finals) |>
gt() |>
gt_img_rows(columns = url,
img_source = "web",
height = 30) |>
fmt_pct_extra(columns = 2:5, scale = 100) |>
cols_label(
url = "",
made_2r = "Second Round",
made_3r = "Conf Finals",
made_4r = "NBA Finals",
win_finals = "NBA Champion"
) |>
gt_theme_pff() |>
tab_style(
style = list(
cell_text(weight = "bold", align = "center")
),
locations = cells_body()
) |>
tab_spanner(
label = "Predicted Probabilty of Advancing To",
columns = c(2:5)
)
t2 <- sim_results |>
filter(row_number() > 8) |>
arrange(desc(win_finals)) |>
select(url, made_2r, made_3r, made_4r, win_finals) |>
gt() |>
gt_img_rows(columns = url,
img_source = "web",
height = 30) |>
fmt_pct_extra(columns = 2:5, scale = 100) |>
cols_label(
url = "",
made_2r = "Second Round",
made_3r = "Conf Finals",
made_4r = "NBA Finals",
win_finals = "NBA Champion"
) |>
gt_theme_pff() |>
tab_style(
style = list(
cell_text(weight = "bold", align = "center")
),
locations = cells_body()
) |>
tab_spanner(
label = "Predicted Probabilty of Advancing To",
columns = c(2:5)
)
gt_two_column_layout(
list(t1, t2)
)
| Predicted Probabilty of Advancing To | ||||
|---|---|---|---|---|
| Second Round | Conf Finals | NBA Finals | NBA Champion | |
| 66.0% | 53.6% | 37.4% | 16.2% | |
| 57.2% | 39.1% | 22.2% | 7.5% | |
| 79.7% | 35.6% | 13.2% | 4.1% | |
| 34.0% | 23.6% | 11.5% | 2.8% | |
| 42.8% | 22.2% | 8.4% | 1.5% | |
| 70.2% | 18.5% | 6.1% | <1% | |
| 20.3% | 3.1% | <1% | <1% | |
| 29.8% | 4.3% | <1% | <1% | |
| Predicted Probabilty of Advancing To | ||||
|---|---|---|---|---|
| Second Round | Conf Finals | NBA Finals | NBA Champion | |
| 96.7% | 88.2% | 73.5% | 56.2% | |
| 85.6% | 66.5% | 18.4% | 8.7% | |
| 67.3% | 21.5% | 2.7% | 1.1% | |
| 70.0% | 8.5% | 3.3% | <1% | |
| 30.0% | 2.2% | <1% | <1% | |
| 32.7% | 7.1% | <1% | <1% | |
| 3.3% | 1.1% | <1% | <1% | |
| 14.4% | 4.9% | <1% | <1% | |