如何在facet_wrap中为标签添加表达式?

RTM*_*RTM 9 r ggplot2

我有一个数据集,我想从中绘制小的倍数,特别是在2乘2的数组中,如下所示:

mydf <- data.frame(letter = factor(rep(c("A", "B", "C", "D"), each = 20)), x = rnorm(80), y = rnorm(80))
ggplot(mydf, aes(x = x, y = y)) + geom_smooth(method = "lm") + geom_point() + facet_wrap(~ letter, ncol = 2)
Run Code Online (Sandbox Code Playgroud)

但是,我希望每个构面标签都包含一个表达式,例如

expression(paste("A or ", alpha))
Run Code Online (Sandbox Code Playgroud)

我可以使用facet_grid()via 来实现这一点

f_names <- list('A' = expression(paste("A or ", alpha)), 'B' = expression(paste("B or ", beta)), 'C' = expression(paste("C or ", gamma)), 'D' = expression(paste("D or ", delta)))
f_labeller <- function(variable, value){return(f_names[value])}
ggplot(mydf, aes(x = x, y = y)) + geom_smooth(method = "lm") + geom_point() + facet_grid(~ letter, labeller = f_labeller)
Run Code Online (Sandbox Code Playgroud)

但后来我输掉了2比2阵列.如何facet_wrap()使用表达式重命名构面标签?或者,我如何通过重新创建2-by-2数组来解决这个问题facet_grid(),但只能面对单个变量?

(这个问题建立在@ baptiste对前一个问题的回答中的括号内.)

谢谢!

RTM*_*RTM 8

为了做什么,我问,第一负荷@Roland该贴标机的功能最早出现在这里:

facet_wrap_labeller <- function(gg.plot,labels=NULL) {
  #works with R 3.0.1 and ggplot2 0.9.3.1
  require(gridExtra)

  g <- ggplotGrob(gg.plot)
  gg <- g$grobs      
  strips <- grep("strip_t", names(gg))

  for(ii in seq_along(labels))  {
    modgrob <- getGrob(gg[[strips[ii]]], "strip.text", 
                       grep=TRUE, global=TRUE)
    gg[[strips[ii]]]$children[[modgrob$name]] <- editGrob(modgrob,label=labels[ii])
  }

  g$grobs <- gg
  class(g) = c("arrange", "ggplot",class(g)) 
  g
}
Run Code Online (Sandbox Code Playgroud)

然后保存原始ggplot()对象:

myplot <- ggplot(mydf, aes(x = x, y = y)) + geom_smooth(method = "lm") + geom_point() + facet_wrap(~ letter, ncol = 2)
Run Code Online (Sandbox Code Playgroud)

然后调用facet_wrap_labeller()并提供表达式标签作为参数:

facet_wrap_labeller(myplot, labels = c(expression(paste("A or ", alpha)), expression(beta), expression(gamma), expression(delta)))
Run Code Online (Sandbox Code Playgroud)

表达式现在应显示为facet_wrap()标签.

  • 对于目前更多尝试此操作的人,现已在ggplot中实施了一个解决方案。在[ggplot索引](http://docs.ggplot2.org/current/labellers.html)的底部有一个很好的示例,它显示了如何使用facet_wrap轻松地完成此操作。 (2认同)