总之,我的问题是如何使用(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表达式。
答案 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)