ggplot2 facet_grid自定义标签,包含group,subscript和value

时间:2013-05-29 09:20:26

标签: r ggplot2

总之,我的问题是如何使用(1)facet_grid (2)group("|",A['i,j'],"|")value创建标签?

对于(1),使用expression(),我只能将其设为,不用 value

plot_labeller <- function(variable,value){
  print(value)
  if (variable=='FOO') {
    expr1 <- expression(group("|",A['i,j'],"|"))
    return(expr1)
  } else {
    return("bla")
  }
}

对于(2),显示value,使用paste()仅适用于相当简单的数学expr。例如:

plot_labeller <- function(variable,value){
  if (variable=='FOO') {
    expr1 <- paste("alpha"," : ",value)
    return(expr1)
  } else {
    return("bar")
  }
}

但是,paste()不适用于group()(e:找不到功能“组”)。即使没有group()它也不起作用:“A ['i,j']”然后“按原样”显示,即不应用plotmath。使用bquote(),如:

plot_labeller <- function(variable,value){
  if (variable=='FOO') {
    expr1 <- bquote(group("|",A['i,j'],"|") : .(value))
    return(expr1)
  } else {
    return("bar")
  }
}

无效:

Error in labels[, i] <- labeller(names(label_df)[i], label_df[, i]) : 
number of items to replace is not a multiple of replacement length

使用text()打印bquoted表达式。

1 个答案:

答案 0 :(得分:2)

我确信这是一种更简单,更好的方法,但这是一个想法:

library(ggplot2)

d <- data.frame(x=1:10, y=1:10, f=gl(2,5, labels=c("FOO","BLAH")))

make_label <- function(value)
  bquote(group("|",A['i,j'],"|"):.(value))

plot_labeller <- function(variable,value){
  print(value)
  if(variable=='f')
    do.call(expression, lapply(levels(value)[value], make_label)) else "other"
}

qplot(x,y,data=d) + facet_grid(.~f, labeller=plot_labeller)