我试图构建一个通用函数来生成一些图形。所以我必须创建一个结合表达式和字符串的轴标签。我试过了:
i <- 2
measure <- c(expression((kg/m^2)), "(%)")
variable <- c("BMI", "Cintilografia 1h")
data <- data.frame(x = 0, y = 0)
gp <- ggplot(data, aes(x = x, y = y)) +
geom_point() +
labs(y = parse(text = paste(variable[i], measure[i])))
适用于i = 1
,但适用于i = 2
。
我发现parse函数对特殊字符有一些问题。我希望用户功能不要担心这些功能。然后,我正在寻找更通用的解决方案。
有没有人有任何想法? 提前致谢
答案 0 :(得分:2)
在处理要使用?plotmath
标记的标签时,尝试粘贴和解析不是一个好主意。使用表达式更好。 bquote()
函数使得在表达式中弹出值更容易一些。这应该适合你
i<-1
g1<-ggplot(data, aes(x = x, y = y)) +
geom_point() +
labs(y = bquote(.(variable[i])~.(measure[[i]])))
i<-2
g2<-ggplot(data, aes(x = x, y = y)) +
geom_point() +
labs(y = bquote(.(variable[i])~.(measure[[i]])))
gridExtra::grid.arrange(g1,g2, ncol=2)
另请注意,在bquote()
对象上使用measure
时,由于它是表达式,因此您希望使用[[ ]]
而不是[ ]
提取子表达式,因为后者总是将结果包装在expression()
中,plotmath
不喜欢嵌套表达式 - 你想要正确的调用对象。