|
4 | 4 | #' In conjunction with the [ggplot2::theme] system, the following `element_`
|
5 | 5 | #' functions enable images in non-data components of the plot, e.g. axis text.
|
6 | 6 | #'
|
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 |
10 | 12 | #' - `element_path()`: draws images from valid image URLs instead of the URL.
|
11 | 13 | #'
|
12 | 14 | #' @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,
|
178 | 180 | )
|
179 | 181 | }
|
180 | 182 |
|
| 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 | + |
181 | 232 | #' @export
|
182 | 233 | element_grob.element_mlb_logo <- function(element, label = "", x = NULL, y = NULL,
|
183 | 234 | alpha = NULL, colour = NULL,
|
@@ -500,9 +551,184 @@ element_grob.element_path <- function(element, label = "", x = NULL, y = NULL,
|
500 | 551 | }
|
501 | 552 |
|
502 | 553 |
|
| 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 | + |
503 | 729 | axisImageGrob <- function(i, label, alpha, colour, data, x, y, hjust, vjust,
|
504 | 730 | 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")) { |
506 | 732 | make_null <- FALSE
|
507 | 733 | type <- rlang::arg_match(type)
|
508 | 734 | if(type == "teams") {
|
@@ -530,6 +756,21 @@ axisImageGrob <- function(i, label, alpha, colour, data, x, y, hjust, vjust,
|
530 | 756 | } else if (type == "dot_headshots") {
|
531 | 757 | id <- label[i]
|
532 | 758 | 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") |
533 | 774 | } else {
|
534 | 775 | id <- label[i]
|
535 | 776 | headshot_map <- load_headshots()
|
|
0 commit comments