101 votes

Comment traiter l'erreur "data of class uneval" de ggplot2 ?

En essayant de superposer une nouvelle ligne à une ligne existante ggplot 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 données horaires "récentes" sur la production éolienne provenant d'un marché de l'électricité du Midwest des États-Unis.

Recent Hourly Wind Data

Maintenant, je veux superposer les observations des deux derniers jours en rouge. Cela devrait être facile mais je n'arrive pas à comprendre pourquoi j'obtiens une erreur.

Toute aide serait grandement appréciée.

Vous trouverez 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

165voto

Justin Points 19077

Lorsque vous ajoutez un nouvel ensemble de données à un géom, vous devez utiliser la fonction data= argument. Ou mettez les arguments dans le bon ordre mapping=..., data=... . Jetez un coup d'œil aux arguments en faveur 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")

13voto

smci Points 2818

Une autre cause est de mettre accidentellement le data=... à l'intérieur de la aes(...) au lieu 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 se produire lorsque vous prototypez votre commande de tracé avec qplot() qui n'utilise pas un aes() puis de l'éditer/copier/coller dans un fichier ggplot()

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

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

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

4voto

Nova Points 1100

Cela peut également se produire si vous faites référence à une variable dans le data.frame qui n'existe pas. Par exemple, j'ai récemment oublié de dire à ddply de résumer par une de mes variables que j'ai utilisée 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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X