Skip to content


Repository files navigation

⚠️HEADS UP: This readme is no longer maintained. Visit for my data science / stats / R artwork.⚠️

Just added!

Lowndes & Çetinkaya-Rundel 2022 RStudio Conference Keynote: "Hello, Quarto"

The following illustrations are from Julia Lowndes and Mine Çetinkaya-Rundel's keynote talk "Hello, Quarto" at the 2022 RStudio Conference in Washington, D.C.

Please credit the images below using: "Artwork from "Hello, Quarto" keynote by Julia Lowndes and Mine Çetinkaya-Rundel, presented at RStudio Conference 2022. Illustrated by Allison Horst."

Alt-text: One penguin standing on another penguin's shoulders in a snowscape, looking through a telescope at a Quarto logo "moon" in the night sky.

Alt-text: Two penguins in a room made of ice, looking out a window. One penguin is holding an icicle as a pointer, pointing at a Quarto logo "moon" in the sky, while the other penguin looks on.

Alt-text: Two happy penguins taking a selfie together in a snowy landscape.

Alt-text: Two excited penguins diving off of an iceberg into the ocean. A Quarto logo "moon" in the sky is reflected in the water that they're diving into.

Alt-text: Two penguins standing on an iceberg at dawn, viewed from behind, with their arms around each others' shoulders. A Quarto logo "moon" is near the horizon.

Alt-text: A schematic representing rendering of Quarto documents from .qmd, to knitr or jupyter, to plain text markdown, then converted by pandoc into any number of output types including html, PDF, or Word document.

Alt-text: A schematic representing the multi-language input (e.g. Python, R, Observable, Julia) and multi-format output (e.g. PDF, html, Word documents, and more) versatility of Quarto.

Alt-text: Two penguins looking happily up at a Quarto logo "meteor" that is flying overhead.

Alt-text: A meteor where the head of the meteor is the Quarto logo.

Alt-text: A coloring book illustration of two penguins, one on the other's shoulders, standing on an iceberg while looking through a telescope at the Quarto logo "moon" in the night sky.


This repo contains my #rstats, data science & stats illustrations shared on my twitter account (@allison_horst).

All of this artwork is 100% available (and encouraged!) for open use by CC-BY license. That means: Hooray! I'm so happy that you want to share this artwork - especially if it helps when teaching R/rstats/stats. For most of the artwork you can just cite with "Artwork by @allison_horst". Please note some series where a different citation is requested (e.g. for collaborative projects).

This work is licensed under a Creative Commons Attribution 4.0 International License.

Alternative text (in progress)

Please include alt-text when you use or share these illustrations. I'm working on adding alt-text right above each image - feel free to update / improve on the alt-text I've included. Also, please share suggestions to improve alt-text as issues - I greatly appreciate your feedback and suggestions, and welcome input on how I can make these illustrations accessible for everyone.

Is the artwork useful for your teaching materials? I would be so grateful if you would...


This artwork is available for free to anyone who wants to use it for your teaching, learning, presentations, and more. If you are a teacher and feel that your course benefits from the artwork, and you can do so without stress or burden, please consider a donation to Indigenous Women Hike. There are a number of ways to donate to Indigenous Women Hike, see options (including PayPal & Venmo) here:

Fill out this form so I know where & how it's getting used!

It would be wonderful to include information about where and how this artwork is being used for my reviews. I would be so grateful if you could complete this very short (5 questions) Google Form, this will really help me out!

Questionnaire: Allison Horst R/stats artwork use

Other recent additions

GitHub Illustrated Series (a collaboration for the Openscapes blog with Dr. Julia Lowndes!)

Please cite the following GitHub Illustrated Series as: "Illustrations from the Openscapes blog GitHub for supporting, reusing, contributing, and failing safely by Allison Horst and Julia Lowndes"

1. Why GitHub? #1


A row of 6 cute smiling monsters celebrating using GitHub. The first, wearing a climbing harness labeled “Me” is high-fiving another whose harness says “Future Me”. Others hold a box of snacks that are tacos, a map, and a rope. Text above the monsters quotes Jenny Bryan: “Collaboration is the most compelling reason to manage a project with Git and GitHub. My definition of collaboration includes hands-on participation by multiple people, including your past and future self, as well as an asymmetric model, in which some people are active makers and others only read or review.”

2. Why GitHub? #2


On the left is a quote from Hadley Wickham and Jenny Bryan that says “Using a Git commit is like using anchors and other protection when climbing…if you make a mistake you can’t fall past the previous commit. Commits are also helpful to others, because they show your journey, not just the destination.” On the right, two little monsters climb a cliff face. Their ropes are secured by several anchors, each labeled “Commit”. Three monsters on the ground support the climbers.

3. GitHub helps streamline our work.


Left panel, against a blue sky with white clouds, a confident-looking monster climbs a rock face. Their rope’s anchors, secured with carabiners, are labeled from bottom to top and say “Initial commit”, “Data Cleaned”, “Analysis completed”. Another anchor on their harness, ready to place, is labeled “Manuscript drafted”. Right panel, against a gray sky with rain and lightning, a stressed-looking monster climbs a rock face. Their rope has a knot, is frayed, and is looped around one foot. Their anchors, placed haphazardly and not well-secured, are labeled things like “analysis_final_v2.xls”, “analysis_final_final.xls”, and “ignore_this.xls”. Text above the left panel says “When working with GitHub we can navigate with more obvious, safe, streamlined routes that let us focus on the science-y things we want to do…” Text above the right panel says: “...but working without GitHub can be disorienting, with too much time spent sifting through past work to figure out next steps forward.”

4. GitHub helps us support


Four little monsters on grass support another monster starting their climb up a rock face. The climber’s harness is labeled “Coder”, the belayer wears a harness labeled “Code review”, two others consulting a book and route map wear caps labeled “Documentation” and “Reuse”, and another brings a box labeled “Project management and snacks”.

5. GitHub helps us reuse


Two monsters consult a book with routes labeled “Existing routes” and “Our route” with warning information - images of lightning, a snake, and rocks falling - and notes on the facing page, while looking at the rock face they plan to climb. In the distance, one monster belays another who is climbing.

6. GitHub helps us contribute


A close-up rear view of a monster climbing a rock face, clicking into an anchor point, with the word “Click!”

7. GitHub helps us fail safely


A confidently smiling monster is falling from a rock overhang, while secured by four anchors, each labeled “Commit”.

8. Harness the power of GitHub


Rear-view of three well-prepared monsters arriving at a climb. They have route maps, binoculars, ropes, backpacks, and a box of snacks. The middle monster has a GitHub Octocat image on their backpack. In the distance, several monsters are at different stages of ascending, with one at the summit, and others supporting them from the base.

9. GitHub for the win!


Partial rear view of a monster with image focusing on their safety harness with a GitHub Octocat logo, chalk bag, carabiners, and rope.

Intro to ACF (autocorrelation function) in time series data:

Thank you to Rob Hyndman for feedback & suggestions on this series!

Autocorrelation series #1

Alt-text: A line of related fuzzy monsters that ranges from more distant relatives (toward the left) to the current generation on the right. Several more recent generations are labeled, from “ME” on the far right, then “MY PARENT”, “MY GRANDPARENT”, “MY GREAT-GRANDPARENT” and “MY GREAT-GREAT GRANDPARENT” moving toward the left. The current generation monster on the left is saying “Hello! Meet some of my ancestors.” Stylized text at the top reads “intro to the autocorrelation function (ACF).”

Autocorrelation series #2


A friendly looking ancestral line of five monsters of simple shapes and varying color, from “My great-great grandparent” on the left to “Me!” on the right. Text says “In our family monsters tend to be a little similar to their parent and great-grandparent, very different from their grandparent, very similar to their great-great grandparent." The two monsters on the ends (great-great grandparent and current generation” are very similar in color and shape, and there is an arrow between them with text “lag = 4 generations. We are very similar!” The monsters separated by two generations (“grandparent” and current generation) are very different in color and shape, with text reading “lag = 2 generations. We are very different!”

Autocorrelation series #3

Alt-text: A long series of friendly looking monsters representing generations in their family, of varying shape and color. Those separated by 4 generations are very similar in shape and color. Those separated by two generations are very dissimilar in shape and color. Text reads: “The autocorrelation function (ACF) is a plot of autocorrelation between a variable and itself separated by specified lags (in our case, generations). Let’s build one!” There is an empty plot area below.

Autocorrelation series #4

Alt-text: A long series of friendly looking monsters representing generations of their family. An arc with “1” is between each subsequent monster, indicating they are separated by one generation. The text reads “At lag = 1, we find the correlation between monsters and their parent. They are somewhat positively correlated.” The ACF plot area now has a single slightly positive bar (indicating the slight positive correlation) at a value of 1 lag on the x-axis. Additional text reads “Note: since the ACF at Lag = 0 is always 1, it is often excluded.”

Autocorrelation series #5

Alt-text: A long series of friendly looking monsters representing generations of their family. An arc with “2” is drawn between each monster and the one at a distance of 2 generations from it (lag = 2). Text reads “At lag = 2, we find the correlation between monsters and their grandparent. Since they tend to be very different, we find a negative correlation at lag = 2.” The ACF plot now has an additional negative bar at Lag = 2, indicating the negative correlation between each monster and their grandparent.

Autocorrelation series #6

Alt-text: A long series of friendly looking monsters representing generations of their family. An arc with “3” is drawn between each monster and the one at a distance of 3 generations from it (lag = 3). Text reads “At lag = 3, we find the correlation between monsters and their great-grandparent. They are slightly positively correlated.” The ACF plot now has an additional slightly positive bar at Lag = 3, indicating the slight positive correlation between each monster and their great-grandparent.

Autocorrelation series #7

Alt-text: A long series of friendly looking monsters representing generations of their family. An arc with “4” is drawn between each monster and the one at a distance of 4 generations from it (lag = 4). Text reads “At lag = 4, we find the correlation between monsters and their great-great-grandparent. They tend to be verys similar (there is a positive correlation.)” The ACF plot now has an additional positive bar at Lag = 4, indicating the positive correlation between each monster and their great-great-grandparent.

Autocorrelation series #8

Alt-text: A long time series of friendly looking monsters representing generations of their family. Monsters separated by 4 generations are very similar, and those separated by 2 generations are very different. An autocorrelation function plot is show below the monsters, revealing positive correlations at lag = 4 and 8, negative correlations at lag = 2 and 5, and smaller positive correlations for other lags. The text reads “and we continue finding the correlations as we increase the lag (generations) between the monsters…”

Autocorrelation series #9

Alt-text: Three very similar blue round monsters standing next to each other, looking very happy and with little hearts between them, representing monsters separated by 4 generations (so they are very similar). There is an example ACF function below them showing positive correlations at lag = 4 and 8. Text reads “In summary: the autocorrelation function (ACF) tells us the correlation between observations and those that came before them, separated by different lags (here, monster generations)!

Workflows that shred...

Alt-text: A cartoon of a cracked glass cube looking frustrated with casts on its arm and leg, with bandaids on it, containing “setwd”, looks on at a metal riveted cube labeled “R Proj” holding a skateboard looking sympathetic, and a smaller cube with a helmet on labeled “here” doing a trick on a skateboard.

Tidy Data series (a collaboration for the Openscapes blog with Dr. Julia Lowndes!)

Please cite the following Tidy Data illustrations as: "Illustrations from the Openscapes blog Tidy Data for reproducibility, efficiency, and collaboration by Julia Lowndes and Allison Horst"

  1. What is tidy data?

Alt-text: Stylized text providing an overview of Tidy Data. The top reads “Tidy data is a standard way of mapping the meaning of a dataset to its structure. - Hadley Wickham.” On the left reads “In tidy data: each variable forms a column; each observation forms a row; each cell is a single measurement.” There is an example table on the lower right with columns ‘id’, ‘name’ and ‘color’ with observations for different cats, illustrating tidy data structure.

  1. Like families...


There are two sets of anthropomorphized data tables. The top group of three tables are all rectangular and smiling, with a shared speech bubble reading “our columns are variables and our rows are observations!”. Text to the left of that group reads “The standard structure of tidy data means that “tidy datasets are all alike…” The lower group of four tables are all different shapes, look ragged and concerned, and have different speech bubbles reading (from left to right) “my column are values and my rows are variables”, “I have variables in columns AND in rows”, “I have multiple variables in a single column”, and “I don’t even KNOW what my deal is.” Next to the frazzled data tables is text “...but every messy dataset is messy in its own way. -Hadley Wickham.”

  1. Comparison of work benches:

Alt-text: On the left is a happy cute fuzzy monster holding a rectangular data frame with a tool that fits the data frame shape. On the workbench behind the monster are other data frames of similar rectangular shape, and neatly arranged tools that also look like they would fit those data frames. The workbench looks uncluttered and tidy. The text above the tidy workbench reads “When working with tidy data, we can use the same tools in similar ways for different datasets…” On the right is a cute monster looking very frustrated, using duct tape and other tools to haphazardly tie data tables together, each in a different way. The monster is in front of a messy, cluttered workbench. The text above the frustrated monster reads “...but working with untidy data often means reinventing the wheel with one-time approaches that are hard to iterate or reuse.”

  1. Friends with similar tools:

Alt-text: Two happy looking round fuzzy monsters, each holding a similarly shaped wrench with the word “wrangle” on it. Between their tools is held up a rectangular data table labeled “TIDY.”

  1. Easier for automation & iteration!

Alt-text: Cute fuzzy monsters putting rectangular data tables onto a conveyor belt. Along the conveyor belt line are different automated “stations” that update the data, reading “WRANGLE”, “VISUALIZE”, and “MODEL”. A monster at the end of the conveyor belt is carrying away a table that reads “Complete analysis.”

  1. And it makes all other tidy datasets seem more welcoming!

Alt-text: Digital illustration of a cute fuzzy monster holding a brief case that says "tidy data," standing beside a friendly looking data table character, being welcomed with cheers by many other data tables and another cute monster jumping with joy.

  1. So make friends with tidy data!

Alt-text: Digital illustration of two cute fuzzy monsters sitting on a park bench with a smiling data table between them, all eating ice cream together. In text above the illustration are the hand drawn words "make friends with tidy data."

R Knowledge Rollercoaster:

Alt-text: An illustrated cartoon graph with “How much I think I know about R” on the y-axis, with axis labels at “I know nothing” and “I know lots”, versus “time” on the x-axis. The line varies widely between the two. Above the line are emoji-like faces, showing uncertainty and hope early on. At a second peak is the label “join R community on twitter”, with a “mind-blown” emoji face. The line quickly descends, but with a happy looking emoji character sliding down it.

Derivatives thread:

Alt-text: A cartoon showing a sad looking yellow point on a function, with a thought bubble that reads “Hello, I am point (x, f(x)). I want to find the slope exactly where I am, but the equation for slope requires 2 points.” The slope expression (change in y divided by the change in x) is written on the graph area.

Alt-text: A cartoon with two points on a function. The blue point that just showed up looks excited and is at some distance from the yellow point, with a speech bubble reading “I am your neighbor just delta x down the road, (x + delta x, f(x + delta x))! Can I help?” The yellow point responds “Well, let’s start by finding the average slope between us.”

Alt-text: The same two yellow and blue points separated by delta x on a function, with a green line representing the average slope between them. The equation for the average slope is show. Both points look satisfied.

Alt-text: Stylized text reading “So: the average slope between any two points on a function separated by delta x is quantity f(x+ delta x) - f(x) divided by delta x.”

Alt-text: The same two yellow and blue points separated by delta x, but now the yellow point is looking bummed out. The blue point says “What’s wrong?” and the yellow point responds “Well, I was hoping we could find my exact slope…”

Alt-text: Close up montage of the blue point, thinking hard about different ways to calculate an exact slope. In gray text behind them are equations for slope, tangents, delta x, crumpled papers. Finally in the third illustration in the montage, the blue point is holding their arms up in victory with a lightbulb above them and the word “LIMITS.”

Alt-text: Two cartoon points on a function. The blue point is swooping down toward the yellow point, yelling “I’M COMING OVER!” The yellow point looks kind of stunned and says “what.” The blue point responds “If I get really close to you, then our average slope will be close to your exact slope!” On the x-axis is gray text reading “delta x is shrinking!” as the two points move closer together.

Alt-text: Two cartoon points on a function, now very close together and with the blue point continuing to move toward the yellow point. In a speech bubble, the blue point says “And if the distance between us gets infinitely small (delta x approaches 0), our AVERAGE SLOPE becomes the INSTANTANEOUS SLOPE at a single point!” The yellow point now looks very happy.

Alt-text: A single green point, looking victorious with arms raised, which is now representing the yellow and blue points have converged (delta x is infinitely small). Text reads “The expression for the instantaneous slope at any point on a function, aka the derivative, is found by (1) Finding an expression for the slope between two points on the function separated by delta x, and (2) evaluating that slope as the points get infinitely close together.”

usethis (seriously...):

Alt-text: Two round fuzzy monsters, one riding on the shoulders of the other, who is carrying it up a mountain. The monster riding on the shoulders is labeled “Me” and is saying “so productive!”, , and the one carrying it is labeled “usethis.” The mountain has faint text reading “so many things…” and a small flag at the top reading “yay.”

Faces of debugging:

Alt-text: A cartoon of a fuzzy round monster face showing 10 different emotions experienced during the process of debugging code. The progression goes from (1) “I got this” - looking determined and optimistic; (2) “Huh. Really thought that was it.” - looking a bit baffled; (3) “...” - looking up at the ceiling in thought; (4) “Fine. Restarting.” - looking a bit annoyed; (5) “OH WTF.” Looking very frazzled and frustrated; (6) “Zombie meltdown.” - looking like a full meltdown; (7) (blank) - sleeping; (8) “A NEW HOPE!” - a happy looking monster with a lightbulb above; (9) “insert awesome theme song” - looking determined and typing away; (10) “I love coding” - arms raised in victory with a big smile, with confetti falling.

Monster supporters:

Alt-text: Cute fuzzy monsters holding up signs that read “we believe in you.”

R-related artwork:

beepr let's you pick and play a notification sound when your code/analysis is done running:

Alt-text: A cartoon alligator running excitedly toward a computer with musical notes coming out of it. Text reads “beepr::beep()s when your analysis is done running!”

beepr blank:

broom makes messy model / statistical outputs into tidy tibbles:

Alt-text: Cute round monsters with brooms cleaning up messy looking data tables. The tables go in looking a bit haggard and unruly, and come out as nice sparkly rectangles. Stylized text at the top reads “broom: turn messy model outputs into tidy tibbles!”

broom blank:

dplyr::mutate creates or transforms a variable (column) while keeping the existing ones:

Alt-text: Cartoon of cute fuzzy monsters dressed up as different X-men characters, working together to add a new column to an existing data frame. Stylized title text reads “dplyr::mutate - add columns, keep existing.”

mutate blank:

dplyr: get your data wrangling on.

Alt-text: Cartoon of a fuzzy monster with a cowboy hat and lasso, riding another fuzzy monster labeled “dplyr”, lassoing a group of angry / unruly looking creatures labeled “data.”

dplyr::across() makes it easy to apply a function (or functions) across selected columns!

Alt-text: A cute round fuzzy monster with fairy wings and a wand, with a party hat on reading “mean”, bouncing across the top of a data table applying the function to each column. Stylized text reads: “dplyr::across() - use within mutate() or summarize() to apply function(s) to a selection of columns!” An example shows the use within summarize: summarize(across(where(is.numeric), mean)).

across blank:

dplyr::case_when() for friendly if_else statements:

Alt-text: Cartoon showing a table with creature type (kraken, dragon, or cyclops) and age (baby, teen, or adult). The three creatures listed are adding a new column named “danger”, which contains the word “extreme!” if the type is “kraken”, or “high” for any other type. Stylized text reads “dplyr::case_when() - IF ELSE...but you love it? An example of code is shown: mutate(danger = case_when(type == “kraken” ~ “extreme!”, TRUE ~ “high”).

dplyr::filter() to subset rows based on your conditions:

Alt-text: Cartoon showing three fuzzy monsters either selecting or crossing out rows of a data table. If the type of animal in the table is “otter” and the site is “bay”, a monster is drawing a purple rectangle around the row. If those conditions are not met, another monster is putting a line through the column indicating it will be excluded. Stylized text reads “dplyr::filter() - keep rows that satisfy your conditions.”

filter blank:

dplyr::relocate: a friendly function for moving columns around (in dplyr 1.0.0)!

Alt-text: Cartoon of fuzzy monsters moving columns around in fork lifts, while one supervises. Stylized text reads “dplyr::relocate() - move columns around! Default: move to FRONT , or move to .before or .after a specified column.”

relocate blank:

gganimate: get a little action in(to your graphs)...

Alt-text: Cartoon of a bunch of monsters watching data points of varing color and shape fly across a screen like fireworks. Several monsters are lighting the data off like fireworks. Stylized text reads “gganimate: action figures!”

gganimate blank:

ggplot2 for visual data exploration:

Alt-text: A group of fuzzy round monsters with binoculars, backpacks and guide books looking up a graphs flying around with wings (like birders, but with exploratory data visualizations). Stylized text reads “ggplot2: visual data exploration.”

ggplot2 exploratory blank:

...and use ggplot2 for creating beautiful data masterpieces!

Alt-text: A fuzzy monster in a beret and scarf, critiquing their own column graph on a canvas in front of them while other assistant monsters (also in berets) carry over boxes full of elements that can be used to customize a graph (like themes and geometric shapes). In the background is a wall with framed data visualizations. Stylized text reads “ggplot2: build a data masterpiece.”

ggplot2 masterpiece blank:

here for more peaceful (file) paths:

Alt-text: A cartoon showing two paths side-by-side. On the left is a scary spooky forest, with spiderwebs and gnarled trees, with file paths written on the branches like “~/mmm/nope.csv” and “setwd(“/haha/good/luck/”), with a scared looking cute fuzzy monster running out of it. On the right is a bright, colorful path with flowers, rainbow and sunshine, with signs saying “here!” and “it’s all right here!” A monster facing away from us in a backpack and walking stick is looking toward the right path. Stylized text reads “here: find your path.”

here blank:

The janitor package contains multiple user-friendly functions for cleaning messy data, including clean_names() to update all of your column names to a nice case of your choosing (snake_case! lowerCamel! UpperCamel! SCREAMING_SNAKE! ...and more) all at once:

Alt-text: A cartoon beaver putting shapes with long, messy column names (pulled from a bin labeled “MESS” and “not so awesome column names”) into a contraption that converts them to lower snake case. The output has stylized text reading “Way more deal-withable column names.” Title text reads “janitor::clean_names(): convert all column names to *_case!”

Use lubridate to work more easily & intuitively with dates & times:

Alt-text: A cartoon Delorean, with several fuzzy monsters dressed in lab coats pouring date-times into the flux capacitor, with one holding a lubridate cheatsheet. One fuzzy monster is flying on a hoverboard, dressed like Marty McFly from Back to the Future. Title text reads “lubridate: time control!”

lubridate time control blank:

Like lubridate_ymd() to easily parse year/month/day data!

Alt-text: Fuzzy cartoon monsters in construction hats sorting a pile of “Y” “M” and “D”s into separate piles labeled “Years”, “Months” and “Days”. Title text reads “Lubridate: wrangle times and dates!”

lubridate ymd blank:

Use readr::parse_number() to just keep the numeric parts, & remove characters:

Alt-text: Two cute monsters working together to update a movie theatre marquee, removing any non-numeric information from a sign labeled “My Data” with a combination of numeric values and character strings. Stylized text reads “readr::parse_number() - just give me the numbers.”

parse_number blank:

Part of tidymodels, the parsnip package creates standardized syntax across model engines:

Alt-text: Fuzzy monster cartoons lined up in various race cars at a checkered starting line. Their race cars are labeled with common modeling engines (stan, keras, glmnet, lm). There is one race-starter monster in aviator sunglasses, holding a flag with the parsnip package hex sticker on it (a cartoon parsnip). Text next to the starting line reads “ model!” Title text reads “parsnip::set_(your)_engine!”

parsnip blank:

Easily arrange and combine ggplots with patchwork!

Alt-text: Fuzzy cartoon monsters in white gloves and uniforms hanging multiple plots together on a wall, with an artist monster wearing a beret and smock directing them to the correct orientation. There is a blueprint plan on the wall showing how the plots should be arranged. Stylized title font reads “patchwork - combine & arrange your ggplots!”

patchwork blank:

You can do it!

Alt-text: A digital cartoon with two illustrations: the top shows the R-logo with a scary face, and a small scared little fuzzy monster holding up a white flag in surrender while under a dark stormcloud. The text above says “at first I was like…” The lower cartoon is a friendly, smiling R-logo jumping up to give a happy fuzzy monster a high-five under a smiling sun and next to colorful flowers. The text above the bottom illustration reads “but now it’s like…”

R first-then blank:

Use @tylermorganwall's rayshader package to create amazing 3D maps and graphs!

Alt-text: A group of fuzzy round monsters adjusting different aspects of a 3D rendering of a map, with different functions from the rayshader package on their uniforms or materials. The ray_shade() lighting operator is controlling a spotlight; the render_label() artist is spraypainting a label onto the map; the sphere_shade() painter is adding shadows to the landscape; the render_depth() monster is blurring the background, and the add and detect_water() monsters are filling a watershed on the map with water from a hose. Stylized title text reads: “Rayshader by @tylermorganwall: create mesmerizing 3D maps and graphs!”

Use recipes to streamline data preprocessing for stats & machine learning models:

Alt-text: A cartoon showing the progression of a fuzzy green round monster baking something, representing steps for data pre-processing available in the recipes package. From left to right: a pantry labeled “Variables pantry” where the monster is picking “response” and “predictor” variables, with text below reading “1. Specify variables”, then the monster writing pre-processing steps on a chalkboard (text reads “define pre-processing steps”), then the monster carrying boxes full of data (text reads “Provide datasets for recipe steps”), and finally the monster mixing things with a stand mixer, pouring contents into different tupperwares labeled “imputed”, “scaled”, “centered”, with text below reading “Apply pre-processing!”

Create reproducible examples to get (and give) help more easily with reprex!

Alt-text: A side-by-side comparison of a monster providing problematic code to tech support when it is on a bunch of crumpled, disorganized papers, with both monsters looking sad and very stressed (left), compared to victorious looking monsters celebrating when code is provided in a nice box with a bow labeled “reprex”. Title text reads “reprex: make reproducible examples. Help them help everyone!”

reprex blank:

Get your code, text & outputs in the same (reproducible) place with Rmarkdown:

Alt-text: A glam rock band comprised of 3 fuzzy round monsters labeled as “Text”, “Outputs” and “Code” performing together. Stylized title text reads: “R Markdown - we’re getting the band back together.”

rmarkdown rockstars blank:

Be an Rmarkdown knitting wizard.

Alt-text: Two fuzzy round monsters dressed as wizards, working together to brew different things together from a pantry (code, text, figures, etc.) in a cauldron labeled “R Markdown”. The monster wizard at the cauldron is reading a recipe that includes steps “1. Add text. 2. Add code. 3. Knit. 4. (magic) 5. Celebrate perceived wizardry.” The R Markdown potion then travels through a tube, and is converted to markdown by a monster on a broom with a magic wand, and eventually converted to an output by pandoc. Stylized text (in a font similar to Harry Potter) reads “R Markdown. Text. Code. Output. Get it together, people.”

rmarkdown wizards blank:

Do your data sci like it's going to need an alibi with Rmarkdown:

Alt-text: A judge’s desk labeled “Reproducibility” with a witness stand right next to it. On the witness stand is a smiling and confident R Markdown document pointing at some lines of code on itself. A fuzzy monster lawyer in a polka-dot tie stands proudly saying “Nothing further!” The judge (also a cute fuzzy monster) is smiling with their hands raised in celebration of reproducible work.

reproducibility court blank:

Use the sf package for simpler spatial data analysis with geometries that stick to attributes:

Alt-text: Three cute fuzzy monsters adding spatial geometries to an existing table of attributes using glue and tape, while one cuts out the spatial polygons. Title text reads “sf: spatial data...simplified.” and a caption at the bottom reads “sticky geometries: for people who love their maps and sanity.”

sf blank:

Soon to be pivot_wider() & pivot_longer()! tidyr::spread() & gather():

stringr::str_squish() removes whitespace before and after strings, and reduced repeated interior whitespace to a single space (see also: str_trim()):

Alt-text: An illustration of four fuzzy monsters squishing together a string containing the words “a cat” with excess whitespace at the ends and between the words, showing those excess whitespaces being eject as they squish the ends together. Text read “stringr::str_squish(): remove leading, trailing & repeated interior whitespace from strings.”

str_squish blank:

Blast off into the...

Alt-text: A galaxy of tidyverse-related hex stickers.

For #rstats and friends!

Alt-text: Two fuzzy monsters standing side-by-side outside of a door frame containing different R communities and accounts on Twitter, with a “mind blown” rainbow coming out of the one closest to the door. A welcome mat says “Welcome.”

rstats blank:

Thanks, #rstats community!

Alt-text: A person in a cape that reads “code hero” who looks like they are flying through the air while typing on a computer while saying “I’m doing a think all on my own!” The coder’s arms and legs have ropes attached to two hot air balloons lifting them up, with labels on the balloons including “teachers”, “bloggers”, “friends”, “developers”. Below the code hero, several people carry a trampoline with labels “support” and “community” that will catch them if they fall

codehero blank:

If you bring group_by() to the party, don't forget dplyr::ungroup()

Alt-text: Two fuzzy monsters in the foreground in birthday party hats celebrate together because one has opened a gift with group_by() inside. Text above those two reads “Other really important parts sold separately!” In the background, a very hopeful little monster stands along holding a package labeled “ungroup”, waiting to be invited.

ungroup blank:

purrr bakers from Hadley Wickham's 2019 talk "The Joy of Functional Programming (for Data Science)"

The following illustrations are in Hadley's ACM talk, which you can watch HERE. Please cite the following artwork with "Illustrations from Hadley Wickham's talk "The Joy of Functional Programming (for Data Science)."


Alt-text: Three green fuzzy monsters sitting in front of a TV with a pile of frosted cupcakes on the screen. A larger magenta fuzzy monster looks at them with an “idea” lightbulb over their head.

Alt-text: A purple fuzzy monster in a chef hat holds up a picture of a cupcake for three fuzzy green monsters, who are also all in chef hats and holding baking equipment and ingredients.

Alt-text: Three green fuzzy monsters in chef hats stand on top of one another, with the one on top pouring flour into a mixing bowl.

Alt-text: Three green fuzzy monsters mixing cupcake batter. The one holding the electric mixer is being swung around by it out of control while the others look cheering at the mayhem.

Alt-text: Three green fuzzy monsters in chef hats pouring cupcake batter into a cupcake tin. One sits to the site eating cupcake batter.

Alt-text: Three green fuzzy monsters in chef hats carrying a tray of baked cupcakes.

Alt-text: Three green fuzzy monsters in chef hats frosting cupcakes with the same vanilla frosting. A purple fuzzy monster to the side holds a recipe book containing code that would automate the cupcake frosting process.

Alt-text: Three green fuzzy monsters in chef hats frosting cupcakes with three different frostings. A purple fuzzy monster to the side holds a recipe book containing code that would automate the cupcake frosting process.

Alt-text: Three green fuzzy monsters in chef hats adding frosting and sprinkles to vanilla cupcakes.

Alt-text: Three green fuzzy monsters in chef hats showing off their final table of frosted, sprinkled cupcakes. One of the three is sitting on the ground looking sick from eating too many cupcakes. A large purple monster is looking on with arms raised in celebration.

Others from this set

For looped:

Alt-text: Three green fuzzy monsters being whipped around on a spinning park platform, with one that’s already been flung on the ground looking dizzy.


Alt-text: A green fuzzy monster in a cowboy hat and mustache, lassoing a group of unruly data tables while riding a blue fuzzy monster.

purrr feels like:

Alt-text: Three green fuzzy monsters nestled together with a friendly large orange cat.

Presenting results:

Alt-text: A green fuzzy monster presenting a scatterplot graph.

R gifs (made for ESM 206 Slack channel, Fall 2020)

Make your own sample cartoons!

I'm building this library of samples, faces & arms so that statistics teachers can create their own fun, charismatic samples to include in stats lectures, slides & materials. The files below contain different graphs (dotplots, histograms, more to come) with matching arms doing different things, along with a file of faces you can add on top to give them some personality. I recommend playing with transparency, brightness, cropping & size in whatever program you use to piece these together! Working on making these PNGs & SVGs.

Here are some examples of DIY creations:

The pieces so that you can make your own:


Choose the expression to add to your sample:

Histogram sticker sheets

Dot plot sticker sheets

Extras & speech bubbles

More coming, feel free to send suggestions.

Other stats artwork:

For loop monster parade

Whale sharks for PCA teaching warm-up

I start with "pretend you are this whale shark..."

Pie charts

For the love of pie charts:

k-means clustering thread:

Hierarchical clustering (single linkage) thread:

Creatures and their distance matrix:

Find the clusters with the minimum distance between elements in them & merge:



Multiple linear regression dragons thread:

Meet your MLR teaching assistants:

Interpret coefficients for categorical predictor variables:

And for continuous predictor variables:

Or make predictions using the regression model:

Understand residuals:

And check for residuals normality:


Release the disco data:

Type I errors:

Type II errors:


Continuous & discrete data:

Nominal, ordinal & binary data:

Openscapes artwork (@jules32 collaborations)

The expanded version of the classic Grolemund & Wickham R4DS workflow, including environmental data & sci comm bookends! Envisioned by Dr. Julia Lowndes for her useR!2019 keynote. Please cite this illustration as: "Updated from Grolemund & Wickham's classis R4DS schematic, envisioned by Dr. Julia Lowndes for her 2019 useR! keynote talk and illustrated by Allison Horst."

Really random stuff

Dog & whale training art:

Make a data shark:

Data to make the shark is HERE. Created with

Translated R-artwork:

Thank you

Thank you to all the R developers, maintainers, contributors, teachers and communicators who actually MAKE all of these amazing packages and documentation that have inspired this #rstats artwork. When I create an illustration with your package it's with immense gratitude for how your hard work has allowed me to do mine (using and teaching #rstats) more efficiently, more clearly, more reproducibly....just plain better. THANK YOU!


R & stats illustrations by @allison_horst







No releases published