Skip to contents

The goal of soccerplotR is to provide functions and geoms that help visualization of professional soccer analysis. It provides a ggplot2 geom that does the heavy lifting of plotting soccer team logos in high quality, with correct aspect ratio and possible transparency. All of this is done by the powerful ggpath package.

Installation

To get a bug fix or to use a feature from the development version, you can install the development version of soccerplotR from GitHub with:

if (!require("pak")) install.packages("pak")
pak::pak("tonyelhabr/soccerplotR")

Examples

Using all_valid_team_names, geom_soccer_logos, and scale_fill_soccer(color = "primary").

library(soccerplotR)
library(ggplot2)
library(showtext)

FONT <- "Kanit"
sysfonts::font_add_google(FONT)
showtext::showtext_auto()
showtext::showtext_opts(dpi = 300)

team_names <- unlist(unname(all_valid_team_names()))
set.seed(42)
sampled_team_names <- sample(team_names, size = 45)

df <- data.frame(
  a = rep(1:5, 9),
  b = sort(rep(0:8, 5), decreasing = TRUE),
  team_name = sampled_team_names
)

ggplot(df) +
  aes(
    x = a, 
    y = b
  ) +
  geom_soccer_logos(
    aes(
      team_name = team_name
    ), 
    width = 0.075
  ) +
  geom_label(
    aes(
      label = team_name,
      fill = team_name
    ),
    color = "white",
    family = FONT,
    size = 10 / .pt,
    nudge_y = -0.5
  ) +
  scale_fill_soccer(type = "primary") +
  theme_void() +
  theme(
    plot.margin = margin(25, 25, 25, 25, "pt"),
    plot.title.position = "plot",
    plot.title = element_text(family = FONT, size = 18, hjust = 0.5)
  ) +
  coord_cartesian(clip = "off") +
  labs(
    title = "A random sample of 45 teams"
  )

Using valid_team_names, scale_color_soccer(color = "secondary"), and scale_fill_soccer(color = "primary").

team_names <- valid_team_names("ENG")

df <- data.frame(
  a = rep(1:5, 9),
  b = sort(rep(0:8, 5), decreasing = TRUE),
  team_name = c(team_names, NA)
)

ggplot(df, aes(x = a, y = b)) +
  geom_point(
    aes(
      color = team_name, 
      fill = team_name
    ), 
    shape = 21,
    size = 12,
    stroke = 3
  ) +
  geom_text(
    aes(
      label = team_name
    ),
    color = "black",
    family = FONT,
    size = 10 / .pt,
    nudge_y = -0.5
  ) +
  scale_color_soccer(type = "secondary") +
  scale_fill_soccer(type = "primary", alpha = 0.8) +
  theme_void() +
  theme(
    plot.margin = margin(25, 25, 25, 25, "pt"),
    plot.title.position = "plot",
    plot.title = element_text(family = FONT, size = 18, hjust = 0.5)
  ) +
  coord_cartesian(clip = "off") +
  labs(
    title = "English teams in {soccerplotR}"
  )