2014-07-11 7 views
12

Sto usando qplot da ggplot2 per tracciare le distanze dei semi dispersi da specie diverse in R. Quando uso geom='density', funziona perfettamente! Ma quello che voglio veramente è una trama di frequenza/area, per la quale ottengo un errore che non so come affrontare.R: errore in qplot da ggplot2: argomento "env" mancante, senza valore predefinito

Questo funziona:

qplot(Dist,data=testx,geom="density",fill=Animal,log=c('x','y'),alpha=I(0.5)) 

Questo non funziona:

qplot(Dist,data=testx,geom="area",fill=Animal,log=c('x','y')) 

Error in exists(name, envir = env, mode = mode) : 
    argument "env" is missing, with no default 

Aiuto? Grazie!

+0

Controlla '? Geom_area', richiede' y' estetica. Consulta anche la domanda [this] (http://stackoverflow.com/questions/4651428/making-a-stacked-area-plot-using-ggplot2). – tonytonov

+0

Grazie a @tonytonov - Ho provato geom_area in precedenza e ho ottenuto lo stesso errore. Cosa intendi per "richiede un aspetto estetico"? è un pacchetto di qualche tipo? – user3831246

+1

Dato che di recente hai iniziato a imparare ggplot, la migliore raccomandazione è leggere il libro di Hadley Wickham. È anche una buona idea iniziare a usare le chiamate a 'ggplot' invece di' qplot', renderà la tua vita più facile a lungo termine. – tonytonov

risposta

8

Il motivo dell'errore (il messaggio è abbastanza oscuro, sono d'accordo) è che si sta tentando di utilizzare geom_area (qplot(geom = "area") corrisponde all'incirca allo + geom_area()). Considerando che geom_density richiede solo x (x = Dist nel tuo caso), questo non è sufficiente per geom_area, poiché utilizza inoltre ymax (per le pagine della guida, vedere this, che collega a this).

Ecco un esempio di densità e la frequenza trame che è possibile regolare per i dati:

ggplot(data=diamonds, aes(x=carat, fill=clarity)) + geom_density(alpha=0.5) 
ggplot(data=diamonds, aes(x=carat, colour=clarity)) + geom_freqpoly() 

Il tuo esempio di codice non è reproducible, quindi non posso verificare la seguente riga, ma

ggplot(data=testx, aes(x=Dist, colour=Animal)) + geom_freqpoly() + 
    scale_x_log10() + scale_y_log10() 

potrebbe essere quello che ti serve.

+0

@ tonytonov, grazie MOLTO. La trama risultante è valida, ma non è proprio quello che avevo in mente. Speravo di produrre forme in tinta unita, con l'ombra di dispersione delle dispersioni meno importanti sovrapposte alle forme solide dei principali dispersori per il confronto. Perché non posso semplicemente definire un ymax e quindi usare la funzione geom_area? Come potrei farlo? Sono totalmente nuovo a ggplot (e stackoverflow) quindi mi scuso se sto facendo un errore di base. – user3831246

+0

Siete i benvenuti. Puoi mostrare un esempio della trama che stai cercando di produrre? Puoi, naturalmente, mappare un'estetica a 'ymax', ma quale sarà? [Qui] (http://www.cookbook-r.com/Graphs/) potresti trovare un esempio della tua trama. – tonytonov

+1

Ciao di nuovo @ tonytonov-- Ho risolto il problema mettendo le distanze in bidoni di 10 metri e facendo il no. di semi in ogni bin la variabile y; quindi la funzione geom_area() ha funzionato bene. Grazie per avermi aiutato a capirlo! – user3831246

8

Per quanto riguarda questo messaggio di errore potrebbe essere utile sottolineare che questo è il messaggio di errore che si ottiene quando si utilizza un insieme di dati vuoto per un istogramma:

df <- data.frame(testx = rnorm(0)) 
p <- ggplot(df, aes(x=testx)) + 
    geom_histogram() 
plot(p) 

Error in exists(name, envir = env, mode = mode) : 
    argument "env" is missing, with no default 

Purtroppo, il messaggio di errore non è molto utile a tutto in questo caso. Quando mi sono imbattuto per la prima volta in questo problema, mi ci è voluto un po 'di tempo per capire che mi ero appena casualmente ritrovato con una cornice dati vuota. L'OP probabilmente ha avuto un problema diverso, ma è sempre bene sapere che questo errore è collegato a questo stupido errore.

Problemi correlati