Skip to content

Commit 2f9abe0

Browse files
committed
Add element functions for new options
1 parent 4a2c589 commit 2f9abe0

File tree

3 files changed

+298
-7
lines changed

3 files changed

+298
-7
lines changed

NAMESPACE

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Generated by roxygen2: do not edit by hand
22

3+
S3method(element_grob,element_milb_dot_headshot)
4+
S3method(element_grob,element_milb_dot_logo)
5+
S3method(element_grob,element_milb_light_cap_logo)
6+
S3method(element_grob,element_milb_logo)
37
S3method(element_grob,element_mlb_dark_cap_logo)
48
S3method(element_grob,element_mlb_dot_headshot)
59
S3method(element_grob,element_mlb_dot_logo)
@@ -24,6 +28,10 @@ export(GeomMiLBlightcaplogo)
2428
export(GeomMiLBlogo)
2529
export(GeomRefLines)
2630
export(clean_team_abbrs)
31+
export(element_milb_dot_headshot)
32+
export(element_milb_dot_logo)
33+
export(element_milb_light_cap_logo)
34+
export(element_milb_logo)
2735
export(element_mlb_dark_cap_logo)
2836
export(element_mlb_dot_headshot)
2937
export(element_mlb_dot_logo)

R/theme_elements.R

Lines changed: 245 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,11 @@
44
#' In conjunction with the [ggplot2::theme] system, the following `element_`
55
#' functions enable images in non-data components of the plot, e.g. axis text.
66
#'
7-
#' - `element_mlb_logo()`, `element_mlb_scoreboard_logo()`, `element_mlb_dot_logo()`: draws MLB team logos instead of their abbreviations.
8-
#' - `element_mlb_dark_cap_logo()` and `element_mlb_light_cap_logo()`: draws MLB team cap logos instead of their abbreviations.
9-
#' - `element_mlb_headshot()`: draws MLB player headshots instead of their MLB IDs
7+
#' - `element_mlb_logo()`, `element_mlb_scoreboard_logo()`, `element_mlb_dot_logo()`: draws MLB team logos instead of their abbreviations
8+
#' - `element_milb_logo`, `element_milb_light_cap_logo()`, and `element_milb_dot_logo`: draws MiLB team logos instead of their team names
9+
#' - `element_mlb_dark_cap_logo()` and `element_mlb_light_cap_logo()`: draws MLB team cap logos instead of their abbreviations
10+
#' - `element_mlb_headshot()` and `element_milb_dot_headshot()`: draws MLB player headshots instead of their MLB IDs
11+
#' - `element_milb_dot_headshot()`: draws MiLB player headshots instead of their MLB IDs
1012
#' - `element_path()`: draws images from valid image URLs instead of the URL.
1113
#'
1214
#' @details The elements translate MLB team abbreviations or MLB player IDs
@@ -178,6 +180,55 @@ element_path <- function(alpha = NULL, colour = NA, hjust = NULL, vjust = NULL,
178180
)
179181
}
180182

183+
#' @export
184+
#' @rdname element
185+
element_milb_logo <- function(alpha = NULL, colour = NA, hjust = NULL, vjust = NULL,
186+
color = NULL, size = 0.5) {
187+
if (!is.null(color)) colour <- color
188+
structure(
189+
list(alpha = alpha, colour = colour, hjust = hjust, vjust = vjust, size = size),
190+
class = c("element_milb_logo", "element_text", "element")
191+
)
192+
}
193+
194+
#' @export
195+
#' @rdname element
196+
element_milb_light_cap_logo <- function(alpha = NULL, colour = NA, hjust = NULL, vjust = NULL,
197+
color = NULL, size = 0.5) {
198+
if (!is.null(color)) colour <- color
199+
structure(
200+
list(alpha = alpha, colour = colour, hjust = hjust, vjust = vjust, size = size),
201+
class = c("element_milb_light_cap_logo", "element_text", "element")
202+
)
203+
}
204+
205+
206+
#' @export
207+
#' @rdname element
208+
element_milb_dot_logo <- function(alpha = NULL, colour = NA, hjust = NULL, vjust = NULL,
209+
color = NULL, size = 0.5) {
210+
if (!is.null(color)) colour <- color
211+
structure(
212+
list(alpha = alpha, colour = colour, hjust = hjust, vjust = vjust, size = size),
213+
class = c("element_milb_dot_logo", "element_text", "element")
214+
)
215+
}
216+
217+
218+
219+
#' @export
220+
#' @rdname element
221+
element_milb_dot_headshot <- function(alpha = NULL, colour = NA, hjust = NULL, vjust = NULL,
222+
color = NULL, size = 0.5) {
223+
if (!is.null(color)) colour <- color
224+
structure(
225+
list(alpha = alpha, colour = colour, hjust = hjust, vjust = vjust, size = size),
226+
class = c("element_milb_dot_headshot", "element_text", "element")
227+
)
228+
}
229+
230+
231+
181232
#' @export
182233
element_grob.element_mlb_logo <- function(element, label = "", x = NULL, y = NULL,
183234
alpha = NULL, colour = NULL,
@@ -500,9 +551,184 @@ element_grob.element_path <- function(element, label = "", x = NULL, y = NULL,
500551
}
501552

502553

554+
#' @export
555+
element_grob.element_milb_logo <- function(element, label = "", x = NULL, y = NULL,
556+
alpha = NULL, colour = NULL,
557+
hjust = NULL, vjust = NULL,
558+
size = NULL, ...) {
559+
560+
if (is.null(label)) return(ggplot2::zeroGrob())
561+
562+
n <- max(length(x), length(y), 1)
563+
vj <- element$vjust %||% vjust
564+
hj <- element$hjust %||% hjust
565+
x <- x %||% unit(rep(hj, n), "npc")
566+
y <- y %||% unit(rep(vj, n), "npc")
567+
alpha <- alpha %||% element$alpha
568+
colour <- colour %||% rep(element$colour, n)
569+
size <- size %||% element$size
570+
571+
grobs <- lapply(
572+
seq_along(label),
573+
axisImageGrob,
574+
alpha = alpha,
575+
colour = colour,
576+
label = label,
577+
x = x,
578+
y = y,
579+
hjust = hj,
580+
vjust = vj,
581+
type = "milb_logo"
582+
)
583+
584+
class(grobs) <- "gList"
585+
586+
grid::gTree(
587+
gp = grid::gpar(),
588+
children = grobs,
589+
size = size,
590+
cl = "axisImageGrob"
591+
)
592+
}
593+
594+
595+
#' @export
596+
element_grob.element_milb_light_cap_logo <- function(element, label = "", x = NULL, y = NULL,
597+
alpha = NULL, colour = NULL,
598+
hjust = NULL, vjust = NULL,
599+
size = NULL, ...) {
600+
601+
if (is.null(label)) return(ggplot2::zeroGrob())
602+
603+
n <- max(length(x), length(y), 1)
604+
vj <- element$vjust %||% vjust
605+
hj <- element$hjust %||% hjust
606+
x <- x %||% unit(rep(hj, n), "npc")
607+
y <- y %||% unit(rep(vj, n), "npc")
608+
alpha <- alpha %||% element$alpha
609+
colour <- colour %||% rep(element$colour, n)
610+
size <- size %||% element$size
611+
612+
grobs <- lapply(
613+
seq_along(label),
614+
axisImageGrob,
615+
alpha = alpha,
616+
colour = colour,
617+
label = label,
618+
x = x,
619+
y = y,
620+
hjust = hj,
621+
vjust = vj,
622+
type = "milb_light_cap"
623+
)
624+
625+
class(grobs) <- "gList"
626+
627+
grid::gTree(
628+
gp = grid::gpar(),
629+
children = grobs,
630+
size = size,
631+
cl = "axisImageGrob"
632+
)
633+
}
634+
635+
636+
637+
#' @export
638+
element_grob.element_milb_dot_logo <- function(element, label = "", x = NULL, y = NULL,
639+
alpha = NULL, colour = NULL,
640+
hjust = NULL, vjust = NULL,
641+
size = NULL, ...) {
642+
643+
if (is.null(label)) return(ggplot2::zeroGrob())
644+
645+
n <- max(length(x), length(y), 1)
646+
vj <- element$vjust %||% vjust
647+
hj <- element$hjust %||% hjust
648+
x <- x %||% unit(rep(hj, n), "npc")
649+
y <- y %||% unit(rep(vj, n), "npc")
650+
alpha <- alpha %||% element$alpha
651+
colour <- colour %||% rep(element$colour, n)
652+
size <- size %||% element$size
653+
654+
grobs <- lapply(
655+
seq_along(label),
656+
axisImageGrob,
657+
alpha = alpha,
658+
colour = colour,
659+
label = label,
660+
x = x,
661+
y = y,
662+
hjust = hj,
663+
vjust = vj,
664+
type = "milb_dot"
665+
)
666+
667+
class(grobs) <- "gList"
668+
669+
grid::gTree(
670+
gp = grid::gpar(),
671+
children = grobs,
672+
size = size,
673+
cl = "axisImageGrob"
674+
)
675+
}
676+
677+
678+
679+
680+
#' @export
681+
element_grob.element_milb_dot_headshot <- function(element, label = "", x = NULL, y = NULL,
682+
alpha = NULL, colour = NULL,
683+
hjust = NULL, vjust = NULL,
684+
size = NULL, ...) {
685+
686+
if (is.null(label)) return(ggplot2::zeroGrob())
687+
688+
n <- max(length(x), length(y), 1)
689+
vj <- element$vjust %||% vjust
690+
hj <- element$hjust %||% hjust
691+
x <- x %||% unit(rep(hj, n), "npc")
692+
y <- y %||% unit(rep(vj, n), "npc")
693+
alpha <- alpha %||% element$alpha
694+
colour <- colour %||% rep(element$colour, n)
695+
size <- size %||% element$size
696+
697+
grobs <- lapply(
698+
seq_along(label),
699+
axisImageGrob,
700+
alpha = alpha,
701+
colour = colour,
702+
label = label,
703+
x = x,
704+
y = y,
705+
hjust = hj,
706+
vjust = vj,
707+
type = "milb_dot_headshots"
708+
)
709+
710+
class(grobs) <- "gList"
711+
712+
grid::gTree(
713+
gp = grid::gpar(),
714+
children = grobs,
715+
size = size,
716+
cl = "axisImageGrob"
717+
)
718+
}
719+
720+
721+
722+
723+
724+
725+
726+
727+
728+
503729
axisImageGrob <- function(i, label, alpha, colour, data, x, y, hjust, vjust,
504730
width = 1, height = 1,
505-
type = c("teams", "light_cap", "dark_cap", "scoreboard", "dot", "headshots", "dot_headshots", "path")) {
731+
type = c("teams", "light_cap", "dark_cap", "scoreboard", "dot", "headshots", "dot_headshots", "milb_logo", "milb_light_cap", "milb_dot", "milb_dot_headshots", "path")) {
506732
make_null <- FALSE
507733
type <- rlang::arg_match(type)
508734
if(type == "teams") {
@@ -530,6 +756,21 @@ axisImageGrob <- function(i, label, alpha, colour, data, x, y, hjust, vjust,
530756
} else if (type == "dot_headshots") {
531757
id <- label[i]
532758
image_to_read <- paste0("https://midfield.mlbstatic.com/v1/people/", id, "/spots/436")
759+
} else if (type == "milb_logo") {
760+
team_name <- label[i]
761+
milb_map <- load_milb_teams()
762+
image_to_read <- milb_map$team_logo[milb_map$team_name == team_name]
763+
} else if (type == "milb_light_cap") {
764+
team_name <- label[i]
765+
milb_map <- load_milb_teams()
766+
image_to_read <- milb_map$team_cap_logo_on_light[milb_map$team_name == team_name]
767+
} else if (type == "milb_dot") {
768+
team_name <- label[i]
769+
milb_map <- load_milb_teams()
770+
image_to_read <- milb_map$team_dot_logo[milb_map$team_name == team_name]
771+
} else if (type == "milb_dot_headshots") {
772+
id <- data$player_id[i]
773+
image_to_read <- paste0("https://midfield.mlbstatic.com/v1/people/", id, "/milb/436?circle=true")
533774
} else {
534775
id <- label[i]
535776
headshot_map <- load_headshots()

man/element.Rd

Lines changed: 45 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)