假设我有如下数据和图表:
mydata = data.frame(x=rnorm(4), y=runif(4), tau=c(0,0,1,1))
ggplot(mydata) + geom_point(aes(x=x, y=y)) + facet_wrap(~ tau)
我希望facet标签分别读作“tau = 0”和“tau = 1”,并将tau格式化为希腊符号。我从another question知道使用标签符label_parsed
会自己格式化字母tau,但等号似乎使事情变得复杂。理想的解决方案不需要我更改数据(即将tau设为一个因子并命名其级别),但我将采取任何有效的方法:)
答案 0 :(得分:10)
这里有一个解决方案facet_grid
adn索引tau的级别。
mydata = data.frame(x=rnorm(4), y=runif(4), tau=c(0,0,1,1))
ggplot(mydata) + geom_point(aes(x=x, y=y)) +
facet_grid(~ tau,labeller = label_bquote(tau ^ .(x)))
修改获取“tau = 0”和“tau = 1”
facet_grid(~ tau,labeller = label_bquote(tau == .(x)))
Edit2 第二个变量sigma
我通过定义自定义贴标机找到了这个解决方案。希望有人(ggplot2人)给我一个更简单的解决方案。
my.label_bquote <- function (expr1 = (tau == .(x)),expr2 = (sigma == .(x)))
{
quoted1<- substitute(expr1)
quoted2 <- substitute(expr2)
function(variable, value) {
value <- as.character(value)
if(variable == 'tau')
lapply(value, function(x)
eval(substitute(bquote(expr1, list(x = x)),list(expr1 = quoted1))))
else
lapply(value, function(x)
eval(substitute(bquote(expr2, list(x = x)),list(expr2 = quoted2))))
}
}
mydata = data.frame(x=rnorm(4), y=runif(4), tau=c(0,0,1,1),sigma=c(2,2,3,3))
ggplot(mydata) + geom_point(aes(x=x, y=y)) +
facet_grid(sigma ~ tau,labeller = my.label_bquote())
答案 1 :(得分:1)
有一个更简单的解决方案。模拟数据变量名称已更改,以清楚它们在labeller参数中的工作方式。
0