#' Plot a teams away travel
#'
#' @param year Year
#' @param team_name Team Name
#'
#' @keywords Plot Travel
#' @import ggplot2
#' @importFrom glue glue
#' @importFrom dplyr select mutate left_join filter if_else
#' @importFrom geosphere distHaversine
#' @export
#' @examples
#'
#' plot_away_travel(2019,"Texas")
#'
plot_away_travel <- function(year,team_name) {
# get data
team_sched <- cfb_game_info(year, team = team_name)
venue_deets <- cfb_venues()
# tidyr::unnest venue location
venue <- venue_deets %>% dplyr::select(.data$venue_id, .data$name, .data$capacity, .data$location) %>%
dplyr::mutate(loc_x = unlist(.data$location$x),
loc_y = unlist(.data$location$y)) %>% dplyr::select(-.data$location)
team_sched_deets = team_sched %>%
dplyr::left_join(venue, by = c("venue_id")) %>%
dplyr::mutate(win = dplyr::if_else(
.data$home_team == team_name,
.data$home_points > .data$away_points,
.data$home_points < .data$away_points
))
home_games = team_sched_deets %>%
dplyr::filter(.data$home_team == team_name) %>%
slice(1)
away_games = team_sched_deets %>%
dplyr::filter(!.data$home_team == team_name) %>%
dplyr::mutate(start_x = home_games %>% pull(.data$loc_x),
start_y = home_games %>% pull(.data$loc_y))
## meters calculation
total_dist <- distHaversine(matrix(c(away_games$loc_y, away_games$loc_x), ncol = 2),
matrix(c(away_games$start_y, away_games$start_x), ncol = 2))
away_games$dist <- total_dist / 1609.34
states <- map_data("state")
map.opts <-
theme(
panel.grid.minor = element_blank(),
panel.grid.major = element_blank(),
panel.background = element_blank(),
axis.title.x = element_blank(),
axis.title.y = element_blank(),
axis.line = element_blank(),
axis.ticks = element_blank(),
axis.text.y = element_text(colour = "#FFFFFF"),
axis.text.x = element_text(colour = "#FFFFFF")
)
total_miles_travelled <- round(sum(away_games$dist), 2)
p <- ggplot(states) +
geom_polygon(aes(x = .data$long, y = .data$lat, group = .data$group),
color = 'black',
fill = 'grey') + map.opts +
coord_fixed(1.3) +
geom_curve(
data = away_games,
aes(
x = .data$start_y,
y = .data$start_x,
xend = .data$loc_y,
yend = .data$loc_x,
col = .data$win,
),
size = 1,
curvature = .2
) +
scale_color_manual(name = "Win", values = c("red", "green")) +
labs(
title = glue::glue("Distance travelled for {team_name} in {year}"),
subtitle = glue::glue("{total_miles_travelled} miles travelled")
)
theme(
panel.background = element_rect(fill = "white"),
axis.line = element_blank(),
axis.text.x = element_blank(),
axis.text.y = element_blank(),
axis.ticks = element_blank(),
axis.title.x = element_blank(),
axis.title.y = element_blank()
)
return(p)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.