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

kub*_*uba 18 scope r ggplot2

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

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

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

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

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

Error in eval(expr, envir, enclos) : object 'k' not found
Run Code Online (Sandbox Code Playgroud)

是否存在使用两个类似..count..变量和一些预定义变量的方法?

Did*_*rts 31

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

例如,这将起作用,因为k仅用于更改x变量:

k<-5
ggplot(dframe,aes(val/k,y=..count..))+geom_bar()
Run Code Online (Sandbox Code Playgroud)

这将产生错误,因为k用于更改y使用stat计算的错误y=..count..

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

要解决这个问题,你可以k在里面解决这个问题aes().

k <- 5
ggplot(dframe,aes(val,k=k,y=..count../k))+geom_bar()
Run Code Online (Sandbox Code Playgroud)