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

Posted

技术标签:

【中文标题】在 R 中自定义 facet_wrap 绘图标签?【英文标题】:Customize facet_wrap plot label in R? 【发布时间】:2022-01-19 22:34:32 【问题描述】:

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

【问题讨论】:

【参考方案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) 你说得对...我会更新我的答案以反映这一点!

以上是关于在 R 中自定义 facet_wrap 绘图标签?的主要内容,如果未能解决你的问题,请参考以下文章

R语言ggplot2可视化分面图(facet_wrap)使用labeller参数自定义设置分面图标签栏(灰色标签栏)的高度

如何控制显示哪些 facet_wrap 标签

在 R 中使用带有 facet_wrap 的 ggplot2 显示多个轴标签

如何在 R 中自定义 Facet_Grid 字体标签

R语言ggplot2可视化删除所有分面图(facet_wrap可视化的facet结果)的标签实战(Remove facet_wrap labels)

如何在颤动中自定义标签栏宽度?