在 R 中自定义 facet_wrap 绘图标签?

Customize facet_wrap plot label in R?

我在 R 中创建了一个 facet_wrap 图,我正在尝试自动化 labeller。我可以使用以下代码手动创建自定义标签:

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)))

上面的代码产生了这个情节:

facetplot

如您所见,我在 names 变量中创建自定义名称,然后将其传递给 labeller 参数。我想想出一种方法来自动化这个过程。所以我可以使用任何名称向量。有什么建议吗?

我想我有一个可能的解决方案。如果用户提供了一个个性化的值向量,比如 vec <- c(1/5, 'Hello', 3.14) 那么我 遍历 vector 的每个值并 粘贴 alpha [=18= 的 unicode 值]并把它变成一个列表。在此之后,我创建了一种虚拟函数,其中包含我的新标签标题列表,并将其传递给标签函数:

  # 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)))
  

这会产生以下结果: