2

要約すると、私の質問はfacet_grid(1)group("|",A['i,j'],"|") (2)でラベルを作成する方法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、 usingpaste()はかなり単純な数学 expr に対してのみ機能します。例えば:

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

ただし、(e: 関数 "グループ" が見つかりませんでした) では機能paste()しません。group()それがなく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()機能します。

4

1 に答える 1

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)
于 2013-06-03T12:46:02.860 に答える