如何在ggplot中使用特殊运算符(..count ..等)在aes中使用先前声明的变量

时间:2013-07-24 11:24:56

标签: r ggplot2 scope

假设我想用以下公式绘制直方图(我知道它不是最好的,但它会说明问题):

set.seed(1)
dframe <- data.frame(val=rnorm(50))
p <- ggplot(dframe, aes(x=val, y=..count..))
p + geom_bar()

它运作得很好。但是,假设由于某种原因,我们希望频率除以收件人定义的数字。我的镜头是:

k <- 5
p <- ggplot(dframe, aes(x=val, y=..count../k))
p + geom_bar()

但是我遇到了这个恼人的错误:

Error in eval(expr, envir, enclos) : object 'k' not found

是否存在同时使用..count..两种变量的方法?

1 个答案:

答案 0 :(得分:31)

当您使用某些ggplot()进行绘图时(例如stat),似乎有y=..count..函数存在一些错误。函数ggplot()已经有environment变量,因此可以使用此函数外部定义的变量。

例如,这样可行,因为k仅用于更改x变量:

k<-5
ggplot(dframe,aes(val/k,y=..count..))+geom_bar()

这会出错,因为k用于更改使用stat y计算的y=..count..

k<-5
ggplot(dframe,aes(val,y=..count../k))+geom_bar()
Error in eval(expr, envir, enclos) : object 'k' not found

要解决此问题,您可以在k。{/ p>内查看aes()

k <- 5
ggplot(dframe,aes(val,k=k,y=..count../k))+geom_bar()