【问题标题】:Customize facet_wrap plot label in R?在 R 中自定义 facet_wrap 绘图标签?
【发布时间】:2023-03-02 23:50:01
【问题描述】:

我正在 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 参数。我想想出一种方法来自动化这个过程。所以我可以使用任何名称向量。有什么建议吗?

【问题讨论】:

    标签: r ggplot2 facet-wrap


    【解决方案1】:

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

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

    这会产生以下结果:

    【讨论】:

    • 感谢您的回答!你不需要循环,只需要paste0('\u03b1',"=", vec)
    • 你说得对...我会更新我的答案以反映这一点!
    猜你喜欢
    • 1970-01-01
    • 2018-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多