2013-07-24 9 views
16

Sagen wir, ich Histogramm mit der folgenden Formel dargestellt werden soll (ich weiß, es ist nicht die beste, aber es wird das Problem veranschaulichen):So verwenden Sie früher deklarierten Variablen innerhalb aes in ggplot mit speziellen Operatoren (..count .. usw.)

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

Es funktioniert gut. Nehmen wir an, wir wollen aus irgendeinem Grund Frequenzen teilen, die durch eine früher definierte Nummer geteilt sind. Mein Schuss wäre:

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

Jedoch bekomme ich diese lästigen Fehler:

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

Gibt es eine Möglichkeit für die Verwendung von beiden ..count.. -ähnlichen Variablen mit einigen vordefinierten diejenigen?

Antwort

30

Es scheint, dass es einen Fehler mit ggplot() Funktion gibt, wenn Sie einige stat zum Plotten verwenden (zum Beispiel y=..count..). Funktion ggplot() hat bereits environment variabel und so kann es Variable außerhalb dieser Funktion definiert verwenden.

Zum Beispiel dies funktionieren wird, weil k wird nur verwendet, x Variablen zu ändern:

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

Dies wird einen Fehler, weil k verwendet wird y zu ändern, die mit stat berechnet y=..count..

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

Um dieses Problem zu lösen Sie k innerhalb des aes() kefine können.

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

@DidzisElferts Das wäre mir nie passiert. Ich war bereit, eine Antwort mit 'Get' zu posten. – Roland

+1

@kuba 'p <- ggplot (dframe, aes (x = val, y = .. zählen ../ get (" k ", envir = .GlobalEnv)))' – Roland

+0

Ich denke, es gibt einen Fehler, um ehrlich zu sein; ggplot() hat einen 'environment'-Parameter, der aber anscheinend ignoriert wird, wenn stat-Variablen verwendet werden. – baptiste

Verwandte Themen