aa3ls
aa3ls

Reputation: 125

Customize facet_wrap plot label in R?

I'm creating a facet_wrap plot in R, and I'm trying to automate the labeller. I can create a custom label manually, using this code:

library(ggplot2)
library(tidyverse)
df <- data.frame(a = rep(c(1/8,1/4,1/2), each = 100),
                 b = rep(c("A", "B", "C", "D"), each = 25),
                 x = rnorm(100))


names <- c(
  `0.125` = "alpha~`=`~1/8",
  `0.25` = "alpha~`=`~1/4",
  `0.5` = "alpha~`=`~1/2"
)

df %>% ggplot() +
  geom_density(aes(x = x, colour = b))+
  facet_wrap(~a, labeller = labeller(a = as_labeller(names, label_parsed)))

The above code produces this plot:

facetplot

As you can see I'm creating the custom names in the names variable and then passing that to the labeller argument. I want to come up with a way to automate this process. So I can use any vector of names. Any suggestions?

Upvotes: 1

Views: 429

Answers (1)

Electrino
Electrino

Reputation: 2890

I think I have a possible solution. If a user supplies a personalised vector of values, say, vec <- c(1/5, 'Hello', 3.14) then Im looping through each value of vector and pasting the unicode value for alpha and turning it into a list. After this I am creating a kind of dummy function that contains my new list of label titles and Im passing that to the labeller function:

  # EDIT: removed loop with help from comments!
  #nam <- NULL
  # for(i in 1:(length(vec))){
  #  nam[i] <-  list(paste0('\u03b1',"=", vec[i]))
  #}
  
  nam <- paste0('\u03b1',"=", vec)
  custLab <- function (x){
    nam
  } 


  p <- df %>% ggplot() +
    geom_density(aes(x = x, colour = b))+
    facet_wrap(~a, labeller = as_labeller((custLab)))
  

This produces the following: solutionPlot

Upvotes: 1

Related Questions