From 56a396093039088bb69de7a7e94c52efbeadde6b Mon Sep 17 00:00:00 2001 From: Steven Patton <96503717+spatto12@users.noreply.github.com> Date: Fri, 2 Feb 2024 13:49:02 -0500 Subject: [PATCH 1/4] Update gt_nfl.R --- R/gt_nfl.R | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/R/gt_nfl.R b/R/gt_nfl.R index b196215..4f9c41d 100644 --- a/R/gt_nfl.R +++ b/R/gt_nfl.R @@ -104,6 +104,41 @@ gt_nfl_cols_label <- function(gt_object, ) } +gt_headshot_cols_label <- function(gt_object, + columns = gt::everything(), + height = 45){ + + if (is.numeric(height)) { + height <- paste0(height, "px") + } + + gt::cols_label_with( + data = gt_object, + columns = {{ columns }}, + + fn = function(gsis){ + headshot_map <- nflplotR:::load_headshots() + image_urls <- vapply( + gsis, + FUN.VALUE = character(1), + USE.NAMES = FALSE, + FUN = function(id) { + if(is.na(id) | !is_gsis(id)) return(NA_character_) + ret <- headshot_map$headshot_nfl[headshot_map$gsis_id == id] + if(length(ret) == 0) ret <- na_headshot() + ret + } + ) + img_tags <- gt::web_image(image_urls, height = height) + # gt::web_image inserts a placeholder for NAs + # We want the actual input instead because users might call + # gt::sub_missing which defaults to "---" + img_tags[is.na(image_urls)] <- gsis[is.na(image_urls)] + gt::html(img_tags) + } + ) +} + gt_nflplotR_image <- function(gt_object, columns, height = 30, From 8cb4941144628557b4a081597f19afe40452a99c Mon Sep 17 00:00:00 2001 From: mrcaseb Date: Sat, 3 Feb 2024 15:44:46 +0100 Subject: [PATCH 2/4] reorganize and add examples --- R/gt_nfl.R | 107 ++++++++++++++++++++----------------- man/figures/cols_label.png | Bin 0 -> 23162 bytes man/gt_nfl_cols_label.Rd | 71 ++++++++++++++++++++++++ man/gt_nfl_logos.Rd | 11 ---- 4 files changed, 130 insertions(+), 59 deletions(-) create mode 100644 man/figures/cols_label.png create mode 100644 man/gt_nfl_cols_label.Rd diff --git a/R/gt_nfl.R b/R/gt_nfl.R index 4f9c41d..c635d43 100644 --- a/R/gt_nfl.R +++ b/R/gt_nfl.R @@ -13,8 +13,6 @@ #' [gt::cells_column_labels()], and [gt::cells_row_groups()] helper functions #' can be used here. We can enclose several of these calls within a `list()` #' if we wish to make the transformation happen at different locations. -#' @param type One of `"logo"` or `"wordmark"` selecting whether to render -#' a team's logo or wordmark image. #' #' @return An object of class `gt_tbl`. #' @seealso The player headshot rendering function [gt_nfl_headshots()]. @@ -73,13 +71,52 @@ gt_nfl_wordmarks <- function(gt_object, ) } - -#' @rdname gt_nfl_logos +#' Render Logos, Wordmarks, and Headshots in 'gt' Table Column Labels +#' +#' @description Translate NFL team abbreviations into logos and wordmarks or +#' NFL player gsis IDs to player headshots and render these images in +#' column labels of 'gt' tables. +#' +#' @inheritParams gt_nfl_logos +#' @param ... Currently not in use +#' @param type One of `"logo"`, `"wordmark"`, or `"headshot"` selecting whether +#' to render a team's logo or wordmark image, or a player's headshot. +#' +#' @return An object of class `gt_tbl`. +#' @seealso The article that describes how nflplotR works with the {gt} package +#' +#' @seealso The logo and wordmark rendering functions [gt_nfl_logos()] and +#' [gt_nfl_wordmarks()]. +#' @seealso The player headshot rendering function [gt_nfl_headshots()]. #' @export +#' @section Output of below example: +#' \if{html}{\figure{cols_label.png}{options: width=75\%}} +#' @examples +#' \donttest{ +#' library(gt) +#' label_df <- data.frame( +#' "00-0036355" = 1, +#' "00-0033873" = 2, +#' "LAC" = 11, +#' "KC" = 12, +#' check.names = FALSE +#' ) +#' +#' # create gt table and translate player IDs and team abbreviations +#' # into headshots, logos, and wordmarks +#' table <- gt::gt(label_df) %>% +#' nflplotR::gt_nfl_cols_label( +#' columns = gt::starts_with("00"), +#' type = "headshot" +#' ) %>% +#' nflplotR::gt_nfl_cols_label("LAC", type = "wordmark") %>% +#' nflplotR::gt_nfl_cols_label("KC", type = "logo") +#' } gt_nfl_cols_label <- function(gt_object, columns = gt::everything(), + ..., height = 30, - type = c("logo", "wordmark")){ + type = c("logo", "wordmark", "headshot")){ type <- rlang::arg_match(type) @@ -91,54 +128,28 @@ gt_nfl_cols_label <- function(gt_object, data = gt_object, columns = {{ columns }}, fn = function(x){ - team_abbr <- nflreadr::clean_team_abbrs(as.character(x), keep_non_matches = FALSE) - # Create the image URI - uri <- get_image_uri(team_abbr = team_abbr, type = type) - # Generate the Base64-encoded image and place it within tags - out <- paste0("") - # If the image uri returns NA we didn't find a match. We will return the - # actual value then to avoid removing a label - out[is.na(uri)] <- x[is.na(uri)] + if (type == "headshot"){ + headshots <- load_headshots() + lookup <- headshots$headshot_nfl + names(lookup) <- headshots$gsis_id + image_url <- lookup[x] + out <- gt::web_image(image_url, height = height) + out[is.na(image_url)] <- x[is.na(image_url)] + } else { + team_abbr <- nflreadr::clean_team_abbrs(as.character(x), keep_non_matches = FALSE) + # Create the image URI + uri <- get_image_uri(team_abbr = team_abbr, type = type) + # Generate the Base64-encoded image and place it within tags + out <- paste0("") + # If the image uri returns NA we didn't find a match. We will return the + # actual value then to avoid removing a label + out[is.na(uri)] <- x[is.na(uri)] + } gt::html(out) } ) } -gt_headshot_cols_label <- function(gt_object, - columns = gt::everything(), - height = 45){ - - if (is.numeric(height)) { - height <- paste0(height, "px") - } - - gt::cols_label_with( - data = gt_object, - columns = {{ columns }}, - - fn = function(gsis){ - headshot_map <- nflplotR:::load_headshots() - image_urls <- vapply( - gsis, - FUN.VALUE = character(1), - USE.NAMES = FALSE, - FUN = function(id) { - if(is.na(id) | !is_gsis(id)) return(NA_character_) - ret <- headshot_map$headshot_nfl[headshot_map$gsis_id == id] - if(length(ret) == 0) ret <- na_headshot() - ret - } - ) - img_tags <- gt::web_image(image_urls, height = height) - # gt::web_image inserts a placeholder for NAs - # We want the actual input instead because users might call - # gt::sub_missing which defaults to "---" - img_tags[is.na(image_urls)] <- gsis[is.na(image_urls)] - gt::html(img_tags) - } - ) -} - gt_nflplotR_image <- function(gt_object, columns, height = 30, diff --git a/man/figures/cols_label.png b/man/figures/cols_label.png new file mode 100644 index 0000000000000000000000000000000000000000..4fef28d66a1929c7434de23c76bce4af10ad9c23 GIT binary patch literal 23162 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 d7lXK\% + nflplotR::gt_nfl_cols_label( + columns = gt::starts_with("00"), + type = "headshot" + ) \%>\% + nflplotR::gt_nfl_cols_label("LAC", type = "wordmark") \%>\% + nflplotR::gt_nfl_cols_label("KC", type = "logo") +} +} +\seealso{ +The article that describes how nflplotR works with the {gt} package +\url{https://nflplotr.nflverse.com/articles/gt.html} + +The logo and wordmark rendering functions \code{\link[=gt_nfl_logos]{gt_nfl_logos()}} and +\code{\link[=gt_nfl_wordmarks]{gt_nfl_wordmarks()}}. + +The player headshot rendering function \code{\link[=gt_nfl_headshots]{gt_nfl_headshots()}}. +} diff --git a/man/gt_nfl_logos.Rd b/man/gt_nfl_logos.Rd index 4c3a18d..49332a6 100644 --- a/man/gt_nfl_logos.Rd +++ b/man/gt_nfl_logos.Rd @@ -3,19 +3,11 @@ \name{gt_nfl_logos} \alias{gt_nfl_logos} \alias{gt_nfl_wordmarks} -\alias{gt_nfl_cols_label} \title{Render Logos and Wordmarks in 'gt' Tables} \usage{ gt_nfl_logos(gt_object, columns, height = 30, locations = NULL) gt_nfl_wordmarks(gt_object, columns, height = 30, locations = NULL) - -gt_nfl_cols_label( - gt_object, - columns = gt::everything(), - height = 30, - type = c("logo", "wordmark") -) } \arguments{ \item{gt_object}{A table object that is created using the \code{\link[gt:gt]{gt::gt()}} function.} @@ -32,9 +24,6 @@ transformation. Only the \code{\link[gt:cells_body]{gt::cells_body()}}, \code{\l \code{\link[gt:cells_column_labels]{gt::cells_column_labels()}}, and \code{\link[gt:cells_row_groups]{gt::cells_row_groups()}} helper functions can be used here. We can enclose several of these calls within a \code{list()} if we wish to make the transformation happen at different locations.} - -\item{type}{One of \code{"logo"} or \code{"wordmark"} selecting whether to render -a team's logo or wordmark image.} } \value{ An object of class \code{gt_tbl}. From ad6156b6f60e3a3099b670049d90266f0b551f03 Mon Sep 17 00:00:00 2001 From: mrcaseb Date: Sat, 3 Feb 2024 15:45:01 +0100 Subject: [PATCH 3/4] update gt article --- vignettes/articles/gt.Rmd | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/vignettes/articles/gt.Rmd b/vignettes/articles/gt.Rmd index 25db7b7..c8d281f 100644 --- a/vignettes/articles/gt.Rmd +++ b/vignettes/articles/gt.Rmd @@ -154,6 +154,22 @@ gt::gt(df) |> ) ``` +HEADSHOTS: + +```{r} +headshot_df <- data.frame( + "00-0036355" = 1, + "00-0033873" = 2, + check.names = FALSE +) +gt::gt(headshot_df) |> + nflplotR::gt_nfl_cols_label(type = "headshot") |> + # align the complete table left + gt::tab_options( + table.align = "left" + ) +``` + ### Logos and Wordmarks Rendered by nflplotR This example creates a table that renders all team logos and wordmarks. We split the table into 2 x 16 rows to avoid an overly long table and convert all variables starting with "logo" to logos and all variables starting with "wordmark" to wordmarks. From e2712d56235e1e897faa26fcb2696dc4a1f6cafa Mon Sep 17 00:00:00 2001 From: mrcaseb Date: Sat, 3 Feb 2024 15:45:31 +0100 Subject: [PATCH 4/4] version bump and NEWS bullet --- DESCRIPTION | 4 ++-- NEWS.md | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 766ac3e..100118a 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: nflplotR Title: NFL Logo Plots in 'ggplot2' -Version: 1.2.0.9007 +Version: 1.2.0.9008 Authors@R: person("Sebastian", "Carl", , "mrcaseb@gmail.com", role = c("aut", "cre")) Description: A set of functions to visualize National Football League @@ -40,4 +40,4 @@ Suggests: Config/testthat/edition: 3 Encoding: UTF-8 Roxygen: list(markdown = TRUE) -RoxygenNote: 7.3.0 +RoxygenNote: 7.3.1 diff --git a/NEWS.md b/NEWS.md index f9319e9..176c9e4 100644 --- a/NEWS.md +++ b/NEWS.md @@ -6,6 +6,7 @@ * Deprecated the functions `scale_x_nfl`, `scale_y_nfl`, `scale_x_nfl_headshots`, `scale_y_nfl_headshots`, `theme_x_nfl`, `theme_y_nfl`. These function are slow and require a possibly unstable dependency. Please use the far superior `element_nfl_logo()` and friends instead. (#50) * The function `geom_nfl_logos()` now plots the NFL logo, if `team_abbr == "NFL"`. (#51) * Added the new function `gt_nfl_cols_label()` that renders logos and wordmarks in column labels of {gt} tables. (#52) +* The function `gt_nfl_cols_label()` now allows rendering of player headshots in column labels. Thanks Steven Patton @spatto12 for the PR. (#55) # nflplotR 1.2.0