2013-07-24 11 views
16

Diciamo che voglio tracciare l'istogramma con la formula seguente (so che non è il migliore ma illustrerà il problema):Come utilizzare le variabili dichiarate in precedenza all'interno di aes in ggplot con operatori speciali (..count .., ecc.)

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

Funziona bene. Comunque diciamo che vogliamo per qualche ragione frequenze divise da un numero definito dal numero. Il mio colpo sarebbe:

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

Tuttavia ottengo questo errore fastidioso:

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

Fa esiste un modo per l'utilizzo di entrambi i ..count.. -come variabili con alcuni tra quelli predefiniti?

risposta

30

Sembra che ci sia qualche problema con la funzione ggplot() quando si utilizza qualche stat per il tracciamento (ad esempio y=..count..). La funzione ggplot() ha già la variabile environment e quindi può utilizzare la variabile definita al di fuori di questa funzione.

Per esempio, questo funzionerà perché k viene utilizzato solo per cambiare x variabile:

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

Questo vi darà un errore perché k viene usata per cambiare y che viene calcolato con stat y=..count..

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

Per risolvere questo problema è possibile utilizzare kefine k all'interno dello aes().

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

@DidzisElferts Che non mi sarebbe mai accaduto. Ero pronto per pubblicare una risposta usando 'get'. – Roland

+1

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

+0

Penso che ci sia un bug per essere onesti; ggplot() ha un parametro 'environment', ma sembra essere ignorato quando vengono utilizzate variabili stat – baptiste

Problemi correlati