使用 ggplot2 组合粘贴和解析函数的替代方法
Alternatives to combination to paste and parse functions using ggplot2
我正在尝试构造一个通用函数来生成一些图形。所以我必须创建一个结合了表达式和字符串的轴标签。我试过:
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
。
我发现解析函数对特殊字符有一些问题。我希望用户功能不必担心这些功能。然后,我正在寻找更通用的解决方案。
有人知道吗?
提前致谢
在处理要使用 ?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)
另请注意,在 measure
对象上使用 bquote()
时,由于它是一个表达式,因此您希望使用 [[ ]]
而不是 [ ]
来提取子表达式因为后者总是将结果包装在 expression()
中,而 plotmath
不喜欢嵌套表达式——您需要适当的调用对象。
我正在尝试构造一个通用函数来生成一些图形。所以我必须创建一个结合了表达式和字符串的轴标签。我试过:
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
。
我发现解析函数对特殊字符有一些问题。我希望用户功能不必担心这些功能。然后,我正在寻找更通用的解决方案。
有人知道吗? 提前致谢
在处理要使用 ?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)
另请注意,在 measure
对象上使用 bquote()
时,由于它是一个表达式,因此您希望使用 [[ ]]
而不是 [ ]
来提取子表达式因为后者总是将结果包装在 expression()
中,而 plotmath
不喜欢嵌套表达式——您需要适当的调用对象。