2013-05-10 1 views
78

Starając się nałożyć nową linię do istniejącej ggplot ja otrzymuję następujący błąd:Jak radzić sobie z błędem "dane klasy nieistniejącej" z ggplot2?

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

Pierwsza część mojego kodu działa prawidłowo. Poniżej znajduje się obraz "ostatnich" godzinowych danych dotyczących generacji energii wiatrowej z rynku energii elektrycznej w Środkowo-Zachodnich Stanach Zjednoczonych.

Recent Hourly Wind Data

Teraz chcę nakładać dwa ostatnie dni warte uwagi w kolorze czerwonym. To powinno być łatwe, ale nie mogę zrozumieć, dlaczego dostaję błąd.

Każda pomoc będzie mile widziana.

Poniżej jest odtwarzalny przykład:

# 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 

Odpowiedz

133

po dodaniu nowego zestawu danych do GEOM trzeba użyć data= argument. Lub umieść argumenty we właściwej kolejności mapping=..., data=.... Spójrz na argumenty dla ?geom_line.

Zatem:

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

Lub:

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

ouch to rodzaj embarrowania !! ale nigdy więcej nie popełnię tego błędu. Dzięki Justin – MikeTP

+26

Nie, nie! i tak, będziesz! Cieszę się, że mogłem cię skierować we właściwym kierunku, a teraz jest tutaj dla potomności. – Justin

9

Inną przyczyną przypadkowego kładzenie data=... wewnątrz aes(...) zamiast zewnątrz:

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

W szczególności może się zdarzyć, kiedy wykonaj prototyp polecenia wydruku z qplot(), który nie korzysta z wyraźnym aes(), następnie edytuj/kopiuj i wklej go do ggplot()

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

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

Nadszedł komunikat szkoda ggplot jest nie Brakujące Argument „dane”! zamiast tego tajemniczego nonsensu, ponieważ to właśnie często oznacza ta wiadomość.

3

Może to również wystąpić, jeśli odwołujesz się do zmiennej w data.frame, która nie istnieje. Na przykład ostatnio zapomniałem powiedzieć ddply, aby podsumować jedną z moich zmiennych, których użyłem w geom_line, aby określić kolor linii. Następnie ggplot nie wiedział, gdzie znaleźć zmienną, której nie utworzyłem w tabeli podsumowania, i otrzymałem ten błąd.

+3

Ten błąd może również wystąpić, jeśli zapomnisz zgasić ggplot za pomocą +. Przypadkowo użyłem operatora%>% dplyr, a ggplot nie uzyskał linii potrzebnych do ukończenia wykresu. –