Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
This script generates 5×5 bingo cards for the Super Bowl (or anything, really). Each randomly-generated card will be saved as a separate PNG for you to print. Use the provided word list, or edit to use your own. You can also modify the title, "rules" text, and "free space" text.
library(ggplot2)
new_theme_empty <- theme_bw()
new_theme_empty$line <- element_blank()
new_theme_empty$rect <- element_blank()
new_theme_empty$strip.text <- element_blank()
new_theme_empty$axis.text <- element_blank()
nCards <- 30
ruleText <- c("Look for these on the field, in the stands, or in the commercials.\n\"\" indicate that you should listen for the broadcast team to say this phrase.")
freeSpaceText <- "Hyperbole"
wordList <- c("Military\nmetaphor", # The \n indicates a newline,
"Casual\nsexism", # so you can insert linebreaks where appropriate.
"\"Matty Ice\"",
"\"Deflategate\"", # And \" allows you to insert a quotation mark.
"Coin flip:\nheads",
"Coin flip:\ntails",
"Safety",
"Crying\nfan",
"\"I'll tell ya\"",
"Fumble",
"Interception",
"Fourth-down\nconversion",
"Blocked kick",
"Blocked punt",
"Onside kick",
"QB Sack",
"First down",
"\"Rung his\nbell\"",
"Intentional\ngrounding",
"\"We talked\nabout\"",
"Gatorade",
"Horse in a\ncommercial",
"Talking\nanimal",
"Foam finger",
"Painted face",
"Player's\nspouse",
"Owner's\nreaction",
"RB scores\ntouchdown",
"QB scores\ntouchdown",
"WR scores\ntouchdown",
"Defense scores\ntouchdown",
"Holding",
"Offsides",
"Flea-flicker",
"Non-QB\npass",
"Fair catch",
"Challenge\nflag",
"Successful\nchallenge",
"Unsuccessful\nchallenge",
"Pass\ninterference",
"Car\ncommercial",
"Beer\ncommercial",
"Soda\ncommercial",
"Candy\ncommercial",
"30+ yard\nreception",
"10+ yard\nreception",
"30+ yard\nrun",
"10+ yard\nrun",
"5+ yard\nrun",
"Coach throws\nheadset",
"Crying\nplayer",
"Field goal",
"Incomplete\npass",
"2-point\nconversion",
"False start",
"Roger\nGoodell",
"\"Take care\nof the\nfootball\"",
"\"Chip shot\"",
"\"Splits the\nuprights\"",
"Icing the\nkicker",
"\"Two-minute\ndrill\"",
"\"Milk the\nclock\"",
"Pick-six",
"\"Second effort\"",
"\"Field\nposition\"",
"\"Shaken up\"",
"Taking a\nknee",
"Public service\nannouncement")
# Loop
for(ii in 1:nCards){
randomWords <- sample(wordList, 25)
randomWords[13] <- freeSpaceText
plotFrame <- data.frame(x = rep(1:5, 5), y = rep(1:5, each = 5), randomWords)
plotFrame$bgColor <- runif(25, 0.9, 1)
zp1 <- ggplot(plotFrame)
zp1 <- zp1 + geom_rect(xmin = 2.5, xmax = 3.5,
ymin = 2.5, ymax = 3.5,
fill = gray(10/11), lty = 3)
zp1 <- zp1 + geom_rect(aes(xmin = x - 1/2, xmax = x + 1/2,
ymin = y - 1/2, ymax = y + 1/2),
fill = "transparent",
colour = gray(2/3))
zp1 <- zp1 + geom_text(aes(x = x, y = y, label = randomWords),
size = 4)
zp1 <- zp1 + coord_equal() + new_theme_empty
zp1 <- zp1 + scale_fill_identity()
zp1 <- zp1 + ggtitle("Super Bowl bingo",
subtitle = ruleText)
zp1 <- zp1 + scale_x_continuous("", limits = c(0.25, 5.75), breaks = 1:5-1/2)
zp1 <- zp1 + scale_y_continuous("", limits = c(0.25, 5.75), breaks = 1:5-1/2)
zp1 <- zp1 + theme(axis.title.x=element_text(size = rel(8/9)))
ggsave(plot = zp1, paste0("Super Bowl bingo card ", ii, ".png"),
type = "cairo-png", h = 10, w = 7.5)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.