web-dev-qa-db-fra.com

Erreur dans ggplot.data.frame: le mappage doit être créé avec aes ou aes_string

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)

Image

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.frames 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...
9
user4993868

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).

7
TJ Mahr
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

0
Robert FC