J'ai un problème lors de l'extraction du chemin à partir d'un ggplot
et je suis coincé avec une erreur.
L'image ci-dessous explique le résultat que je recherche: (Fait dans l'éditeur d'image pour expliquer le but)
Supposons que le tracé 1 est mon tracé d'origine. Ce que je recherche, c'est prendre le premier point comme point "F" et voyager 24 heures à partir de ce point.
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))
Lorsque j'utilise na.approx
pour l'interpolation cela me donne une erreur ?? Sinon non.
Erreur dans environ (x [! Na], y [! Na], xout, ...): besoin d'au moins deux valeurs non NA pour interpoler En outre: Message d'avertissement: dans xy.coords (x, y): NAs introduit par coercition
Avec ces deux data.frame
s combinés. Chaque section F-F est dessinée dans un tracé séparé et seuls les points ne dépassant pas 24h après l'affichage du point F
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)
Erreur
Erreur dans ggplot.data.frame (., Des, aes (x = Loq, y = Las, color = ACT)): le mappage doit être créé avec aes ou aes_string
Voici mon format 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...
L'erreur (dans le titre de l'article) se produit parce que vous avez trop d'arguments pour ggplot
. Comme les commentaires à la note de question, le pipeline %>%
inclut implicitement la sortie du côté gauche du tuyau comme premier argument de la fonction du côté droit.
# these have the same meaning
f(x, y)
x %>% f(y)
Ce code réplique le même type d'erreur. (J'ai séparé le mappage aes
de sa propre étape pour plus de clarté.)
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
Conceptuellement - si vous "décompressez" des choses - ce qui est exécuté est quelque chose comme ceci:
ggplot(filter(mtcars, am == 1), mtcars)
La fonction ggplot
suppose que le premier argument est le paramètre data
et le second est un mappage esthétique aes
. Mais dans votre pipeline, les deux premiers arguments sont des trames de données. C'est la source de l'erreur.
La solution consiste à supprimer l'argument de données redondantes. Plus généralement, je sépare mon pipeline de transformation de données (%>%
chaînes) de mon ggplot
bâtiment de parcelle (+
Chaînes).
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()
Au point: ggplot (., Aes (x = Loq, y = Las)) - utilisez '.' se référer aux données que vous ne pouvez pas doubler