我想更改构面标签,这样我在y轴上有希腊字母,在x轴上有普通文字。测试数据是:
testdata<-data.frame(Method2=c("a","a","b","b"),
gamma=c(0,1,0,1),values=c(1,2,3,4),x=rep(1,4),y=rep(1,4))
testplot2<-ggplot(data=testdata,aes(x=Method2,y=gamma))
testplot2<-testplot2+facet_grid(gamma~Method2 )
testplot2+geom_point()
到目前为止,我已经在许多不同的星座中尝试了以下内容,而且我变得非常绝望: 1)使用粘贴表达式更改数据框中的名称,并使用label_parsed但没有太大成功。
gamma<- factor(sapply(testdata$gamma, function(n){
if(n %in% c("0")) paste(expression(gamma),"0") else
if(n %in% c("1")) paste(expression(gamma),"1")
}), levels=c(paste(expression(gamma),"0"),
paste(expression(gamma),"1")
))
testdata$gamma <- gamma
2)我尝试使用带有
的贴标机my.label_bquote <- function (expr1 = (gamma == .(x)),expr2 = x)
{
quoted1<- substitute(expr1)
function(variable, value) {
value <- as.character(value)
browser()
if(variable == gamma)
lapply(value, function(x) eval(substitute(bquote(expr1, list(x = x)),list(expr1 = quoted1))))
else if(variable == Method2){
value[value=="a"] <- "Whatever"
value[value=="b"] <- "Whatever2"
}
return(value)
}
}
这是对类似问题的先前答案的更改形式: Facet labels involving a greek symbol
非常感谢任何帮助!
答案 0 :(得分:2)
我们如何创建各种标签交换工厂。这是一个通用函数,允许重命名构面标签中的值级别
get_label_swap <- function(...) {
dots<-list(...)
function(variable, value) {
if(variable %in% names(dots)) {
swaps <- dots[[variable]]
vals <- as.character(value)
lapply(vals, function(v) {if(v %in% names(swaps)) swaps[[v]] else v })
} else {
label_value(variable, value)
}
}
}
然后,为了得到一个特定的问题,我们会做
label_swap <- get_label_swap(gamma=list("0"=expression(gamma*0),
"1"=expression(gamma*1)))
因此该函数查看命名参数并期望一个列表,其中列表的名称是因子的值,列表中的值是您要替换它们的值。因此,只有变量“gamma”才会将“0”和“1”与适当的表达式交换。然后它返回一个我们可以作为labeller=
参数传递给ggplot的函数。因此我们用
testplot2 <- ggplot(data=testdata,aes(x=Method2,y=gamma))
testplot2 <- testplot2+facet_grid(gamma~Method2, labeller=label_swap)
testplot2 + geom_point()
导致