Recreate the ca(R) Shiny promotional meme using different plots, frame rate or output size.

car_shiny(file, p1 = NULL, p2 = NULL, fps = 10, test_frame = FALSE, mult = 1)

Arguments

file

character, output filename.

p1

ggplot object for top half of (ca)R Shiny meme.

p2

ggplot object for bottom half of (ca)R Shiny meme.

fps

integer, frames per second.

test_frame

logical, keep only the first frame. Ideal for saving time during testing.

mult

numeric, factor by which to multiply the output meme dimensions. Use conservatively.

Value

nothing is returned, but a file is saved to disk.

Details

This function offers limited control over customization; it is intended as a canned example. For additional customization, use this function's source code in an R script where you can easily alter other values.

After writing the first layer of output to file, file is recursively read and written again two more times in order to add all layers to the animated gif, since the underlying meme function does not accept vectorized inset plots.

The Shiny logo is by RStudio.

Examples

library(ggplot2)
file <- "memery-car-shiny.gif" # outfile
set.seed(1)
p1 <- ggplot(data.frame(x = rbeta(100000, 10, 3)), aes(x)) +
  geom_histogram(colour = "white", fill = "#88888880", size = 1, bins = 30)
#> Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
#>  Please use `linewidth` instead.

means <- (8:1)^3
sds <- 10*(8:1)
d <- data.frame(
  x = rep(factor(1:8), each = 100),
  y = unlist(purrr::map2(means, sds, ~rnorm(100, .x, .y) / 200))
)

p2 <- ggplot(d, aes(x, y)) +
  geom_boxplot(colour = "white", fill = "#5495CF80", outlier.colour = NA) +
  geom_point(shape = 21, colour = "white", fill = "#5495CF80", size = 1,
             position = position_jitter(0.15)) +
  scale_x_discrete(expand = c(0, 0.02)) + scale_y_continuous(expand = c(0.02, 0)) +
  theme_void() +
  theme(plot.margin = unit(rep(5, 4), "mm"),
        panel.grid.major = element_line(colour = "#FFFFFF50", linetype = 2),
        panel.grid.minor = element_line(colour = "#FFFFFF50", linetype = 2))

if (FALSE) car_shiny(file, p1, p2, test_frame = TRUE)