使用ggplot2组合粘贴和解析函数的替代方法

时间:2015-05-19 23:07:59

标签: r ggplot2 expression

我试图构建一个通用函数来生成一些图形。所以我必须创建一个结合表达式和字符串的轴标签。我试过了:

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函数对特殊字符有一些问题。我希望用户功能不要担心这些功能。然后,我正在寻找更通用的解决方案。

有没有人有任何想法? 提前致谢

1 个答案:

答案 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不喜欢嵌套表达式 - 你想要正确的调用对象。

enter image description here