2015-08-08 8 views
9

Ho problemi durante l'estrazione del percorso da un ggplot e sono bloccato con un errore.Errore in ggplot.data.frame: la mappatura deve essere creata con aes o aes_string

L'immagine indicato di seguito spiega il risultato Cerco: (fatto in editor di immagini per spiegare scopo)

Image

Supponiamo che Plot 1 è la mia trama originale. Quello che sto cercando è prendere il primo punto come punto "F" e viaggiare 24 ore da quel punto.

Des %>% 
    mutate(nf = cumsum(ACT=="F")) %>% # build F-to-F groups 
group_by(nf) %>% 
mutate(first24h = as.numeric((DateTime-min(DateTime)) < (24*3600))) %>% # find the first 24h of each F-group 
ggplot(aes(x=Loq, y=Las)) + 
geom_path(aes(colour=first24h)) + scale_size(range = c(1, 2))+ geom_point() 

Library(zoo) 
full.time = seq(Des$DateTime[1], tail(Des$DateTime, 1), by=600) # new timeline with point at every 10 min 
d.zoo = zoo(Des[,2:3], Des$DateTime)  # convert to zoo object 
d.full = as.data.frame(na.approx(d.zoo, xout=full.time)) # interpolate; result is also a zoo object 
d.full$DateTime = as.POSIXct(rownames(d.full)) 

Quando sto usando na.approx per interpolazione mi sta dando errore ?? Altrimenti no.

Error in approx(x[!na], y[!na], xout, ...) : need at least two non-NA values to interpolate In addition: Warning message: In xy.coords(x, y) : NAs introduced by coercion

Con questi due data.frame s combinati. Ogni sezione FF è disegnato in una trama indipendente e solo i punti non più lunghi di 24 ore dopo la F-point è mostrato

library(dplyr) 
library(ggplot) 

Des %>% 
    select(ACT, DateTime) %>% 
    right_join(d.full, by="DateTime") %>% 
    mutate(ACT = ifelse(is.na(ACT),"",ACT)) %>% 
    mutate(nf = cumsum(ACT=="F")) %>% 
    group_by(nf) %>% 
    mutate(first24h = (DateTime-min(DateTime)) < (24*3600)) %>% 
    filter(first24h == TRUE) %>% 
    filter(first24h == 1) %>% 
    ggplot(Des, aes(x=Loq, y=Las,colour=ACT)) + 
    geom_path() + facet_wrap(~ nf) 

errore

Error in ggplot.data.frame(., Des, aes(x = Loq, y = Las, colour = ACT)) : Mapping should be created with aes or aes_string

Questo è il mio formato Des:

ID Las Loq ACT Time Date 
1 12 13 R 23:20 1-1-01 
1 13 12 F 23:40 1-1-01 
1 13 11 F 00:00 2-1-01 
1 15 10 R 00:20 2-1-01 
1 12 06 W 00:40 2-1-01 
1 11 09 F 01:00 2-1-01 
1 12 10 R 01:20 2-1-01 
so on... 
+2

Prova a prendere 'Dati' fuori dalla tua chiamata a' ggplot'. Dato che stai usando la pipe, l'argomento data è assunto e il tuo primo argomento dovrebbe essere "aes". Oppure puoi rimuovere l'operatore di pipe prima di 'ggplot'. – Benjamin

+0

@Benjamin Per favore, puoi incollare il comando qui. Ho provato a togliere i dati inizialmente, poi mi mostra l'errore: 'Loq non trovato' –

+0

Prova a sostituire' Dati' con un '.' – Jaap

risposta

5

L'errore (nel titolo del post) si verifica perché sono presenti troppi argomenti su ggplot. Come i commenti alla nota della domanda, la pipeline %>% include implicitamente l'uscita dal lato sinistro del tubo come primo argomento della funzione sul lato destro.

# these have the same meaning 
f(x, y) 
x %>% f(y) 

Questo codice replica lo stesso tipo di errore. (Ho separato la mappatura aes al proprio passo per chiarezza.)

mtcars %>% 
    filter(am == 1) %>% 
    ggplot(mtcars) + 
    aes(x = mpg, y = wt) + 
    geom_point() 
#> Error in ggplot.data.frame(., mtcars) : 
#> Mapping should be created with aes or aes_string 

Concettualmente - se voi le cose "unpipe" - ciò che viene eseguito è il qualcosa come segue:

ggplot(filter(mtcars, am == 1), mtcars) 

La funzione ggplot presuppone che il primo argomento sia il parametro data e il secondo è un mapping estetico aes. Ma nella tua pipeline, i primi due argomenti sono i frame di dati. Questa è la fonte dell'errore.

La soluzione è rimuovere l'argomento di dati ridondanti. Più in generale, separo la mia pipeline di trasformazione dei dati (catene %>%) dal mio edificio di trama ggplot (catene +).

+0

Puoi aiutarmi con questa domanda tramite una mail privata? Potrei inviarti il ​​set di dati in questo modo. Ho realizzato con successo un campione ma non è stato possibile implementarlo nel mio set di dati originale. ([email protected]) –

Problemi correlati