我正在我将用于许多ggplot图的函数中进行一些计算,因此我需要能够使用该计算的结果进行一些注释,然后将ggplot对象传递回全局环境。 / p>
library(ggplot2)
textDf<- data.frame(x=3,mytext="HELLO WORLD")
ggplot(mpg, aes(x = displ, y = hwy)) + geom_point()
annotate_it <- function(g, textDf) {
yLimMax <- layer_scales(g)$y$range$range[2]
yAnnotate <- yLimMax / 2 #calculations are more complicated in the real use case
g<-g+ geom_text(data=textDf,aes(x=x,y=yAnnotate, label = mytext) )
return (g)
}
g<- annotate_it(g,textDf)
g
这导致错误Error in FUN(X[[i]], ...) : object 'yAnnotate' not found
,因为yAnnotate是函数的本地。
是否有某种方法可以将yAnnotate转换为静态(是正确的术语?)值?
以下的图答案 0 :(得分:2)
以下似乎是一个很好的解决方法。
g <- g + geom_text(data=textDf, aes(x=x, y = 0, label = mytext),
nudge_y = yAnnotate)
编辑
当ggplot
对象的环境更改为函数环境时,它似乎采用aes
中的本地对象。
annotate_it <- function(g, textDf) {
g$plot_env <- environment()
yLimMax <- layer_scales(g)$y$range$range[2];
yAnnotate <- yLimMax / 2;
g <- g + geom_text(data = textDf,
aes(x = x, label = mytext, y = yAnnotate))
return (g)
}