web-dev-qa-db-fra.com

Comment traiter les erreurs "data of class uneval" de ggplot2?

En essayant de superposer une nouvelle ligne à un ggplot existant, j'obtiens l'erreur suivante:

Error: ggplot2 doesn't know how to deal with data of class uneval

La première partie de mon code fonctionne bien. Vous trouverez ci-dessous une image de la production éolienne horaire "récente" d'un marché de l'énergie électrique du Midwest américain.

Recent Hourly Wind Data

Maintenant, je veux superposer les observations des deux derniers jours en rouge. Cela devrait être facile mais je ne peux pas comprendre pourquoi je reçois une erreur.

Toute assistance sera grandement appréciée.

Ci-dessous un exemple reproductible:

# Read in Wind data
fname <- "https://www.midwestiso.org/Library/Repository/Market%20Reports/20130510_hwd_HIST.csv"
df <- read.csv(fname, header=TRUE, sep="," , skip=7)
df <- df[1:(length(df$MKTHOUR)-5),]

# format variables
df$MWh <- as.numeric(df$MWh)
df$Datetime <- strptime(df$MKTHOUR, "%m/%d/%y %I:%M %p")

# Create some variables
df$Date  <- as.Date(df$Datetime)
df$HrEnd <- df$Datetime$hour+1

# Subset recent and last data
last.obs  <- range(df$Date)[2]
df.recent <- subset(df, Date %in% seq(last.obs-30, last.obs-2, by=1))
df.last   <- subset(df, Date %in% seq(last.obs-2,  last.obs,   by=1))

# plot recent in Grey
p <- ggplot(df.recent, aes(HrEnd, MWh, group=factor(Date))) + 
  geom_line(color="grey") +
  scale_y_continuous(labels = comma) + 
  scale_x_continuous(breaks = seq(1,24,1)) +
  labs(y="MWh") + 
  labs(x="Hour Ending") + 
  labs(title="Hourly Wind Generation")    
p

# plot last two days in Red
p <- p + geom_line(df.last, aes(HrEnd, MWh, group=factor(Date)), color="red")  
p
99
MikeTP

lorsque vous ajoutez un nouveau jeu de données à un géom, vous devez utiliser l'argument data=. Ou mettez les arguments dans le bon ordre mapping=..., data=.... Examinez les arguments de ?geom_line.

Ainsi:

p + geom_line(data=df.last, aes(HrEnd, MWh, group=factor(Date)), color="red") 

Ou:

p + geom_line(aes(HrEnd, MWh, group=factor(Date)), df.last, color="red") 
164
Justin

Une autre cause est de placer accidentellement le data=... à l'intérieur de la aes(...) à la place de l'extérieur:

RIGHT:
ggplot(data=df[df$var7=='9-06',], aes(x=lifetime,y=rep_rate,group=mdcp,color=mdcp) ...)

WRONG:
ggplot(aes(data=df[df$var7=='9-06',],x=lifetime,y=rep_rate,group=mdcp,color=mdcp) ...)

Cela peut notamment arriver lorsque vous prototypez votre commande de tracé avec qplot(), qui n'utilise pas de aes() explicite, puis l'éditez/copiez-collez-la dans un ggplot().

qplot(data=..., x=...,y=..., ...)

ggplot(data=..., aes(x=...,y=...,...))

C'est dommage que le message d'erreur de ggplot ne soit pas argument 'données' manquant! au lieu de ce non-sens cryptique, car c'est ce que ce message signifie souvent.

13
smci

Cela peut également se produire si vous vous référez à une variable du fichier data.frame qui n'existe pas. Par exemple, récemment, j'ai oublié de dire à ddply de résumer par l'une de mes variables que j'ai utilisées dans geom_line pour spécifier la couleur de la ligne. Ensuite, ggplot ne savait pas où trouver la variable que je n’avais pas créée dans le tableau récapitulatif, et j’ai eu cette erreur.

4
Nova