R Rainbows: Making a Pride Flag in R

🌈HAPPY PRIDE MONTH!!

Fun fact: my rainbow Twitter banner (which I keep up year-round) was actually made using R! Given that pride season is officially upon us, I thought it’d be fun to share the code I wrote to generate a quick, fun ggplot rainbow flag.


To make the flag, I wrote a function, rainbow_flag(), which depends on one parameter, n. This will control how many colors of the rainbow I want to use (see examples below). I personally like how it looks when I set \(n = 100\), but each one is different and beautiful!

I generate the data to have \(n\) categories, where each category has \(n\) random values ranging from \(1:n\) (this is why I think you want at least \(n > 20\)).

Finally, I create my rainbow flag using geom_bar() to group and stack the data, and the rainbow() color palette function to specify how many colors on the rainbow gradient to use.

rainbow_flag = function(n){
  data = data.frame(x = rep(1:n,n), 
                  y = sample(1:n,n*n,replace=T))
  
  p = ggplot(data) +
    geom_bar(aes(x, group = y,fill=y), width = 1) +
    scale_fill_gradientn(colours = rainbow(n)) +
    theme_void() +
    theme(legend.position = "none")
  
  return(p)
}

Here’s what it looks like when \(n = 25\):

when \(n = 50\):

and when \(n = 100\):

While I know it would be a lot easier to plot six colors in perfect horizontal stripes, I personally like this type of mosaic plot that keeps the rainbow color gradient but adds some randomness to it. Without setting the seed, I like that this code creates a different plot every time, celebrating both pride and individuality! 🎉

Feel free to take the code and modify it as you please, and share the rainbow flag you create! I rotated and cropped one to make it my Twitter banner. It would be awesome to see Twitter flooded with R Rainbows for the month of June and beyond!

Avatar
Benjamin Ackerman
PhD Candidate & Data Scientist

I’m a health researcher interested in using statistics and data science to improve public health and promote social good.

Related