Wie gehe ich mit dem Fehler "Daten der Klasse uneval" von ggplot2 um?

101

Beim Versuch, eine neue Zeile mit einem vorhandenen ggplot zu überlagern, wird der folgende Fehler angezeigt:

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

Der erste Teil meines Codes funktioniert gut. Unten sehen Sie ein Bild der "aktuellen" stündlichen Winderzeugungsdaten eines Strommarktes im Mittleren Westen der USA.

Aktuelle stündliche Winddaten

Jetzt möchte ich die Beobachtungen der letzten zwei Tage in Rot überlagern. Es sollte einfach sein, aber ich kann nicht herausfinden, warum ich einen Fehler erhalte.

Jede Unterstützung wäre sehr dankbar.

Unten ist ein reproduzierbares Beispiel:

# 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
MikeTP
quelle

Antworten:

165

Wenn Sie einem Geom einen neuen Datensatz hinzufügen, müssen Sie das data=Argument verwenden. Oder bringen Sie die Argumente in die richtige Reihenfolge mapping=..., data=.... Schauen Sie sich die Argumente für an ?geom_line.

So:

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

Oder:

p + geom_line(aes(HrEnd, MWh, group=factor(Date)), df.last, color="red") 
Justin
quelle
1
autsch das ist irgendwie peinlich !! aber ich werde diesen Fehler nie wieder machen. Vielen Dank Justin
MikeTP
36
Nein, ist es nicht! und ja wirst du! Ich bin froh, dass ich dich in die richtige Richtung lenken konnte und jetzt ist es hier für die Nachwelt.
Justin
13

Eine andere Ursache ist das versehentliche Einsetzen des data=...Inneren aes(...)anstelle des Äußeren:

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

Dies kann insbesondere dann der Fall sein, wenn Sie einen Prototyp für Ihren Plot-Befehl erstellen qplot(), für den kein expliziter Befehl verwendet wird aes(), und ihn dann bearbeiten / kopieren und in einen Befehl einfügenggplot()

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

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

Es ist schade, dass die Fehlermeldung von ggplot nicht das Argument 'data' fehlt! anstelle dieses kryptischen Unsinns, denn das ist es, was diese Nachricht oft bedeutet.

smci
quelle
4

Dies kann auch auftreten, wenn Sie auf eine Variable im data.frame verweisen, die nicht vorhanden ist. Zum Beispiel habe ich kürzlich vergessen, ddply anzuweisen, anhand einer meiner Variablen, die ich in geom_line verwendet habe, um die Linienfarbe anzugeben, zusammenzufassen. Dann wusste ggplot nicht, wo sich die Variable befindet, die ich nicht in der Übersichtstabelle erstellt hatte, und ich habe diesen Fehler erhalten.

Nova
quelle
6
Dieser Fehler kann auch auftreten, wenn Sie vergessen, ggplot mit + weiterzuleiten. Ich habe versehentlich den%>% -Operator von dplyr verwendet und ggplot hat nicht die Zeilen erhalten, die zum Vervollständigen des Plots erforderlich sind.
Dan Jarratt