Jak radzić sobie z błędem "data of class uneval" z ggplot2?

Podczas próby nałożenia nowej linii na istniejący ggplot otrzymuję następujący błąd:

Error: ggplot2 doesn't know how to deal with data of class uneval
Pierwsza część mojego kodu działa dobrze. Poniżej znajduje się obraz" ostatnich " godzinowych danych dotyczących wytwarzania energii wiatrowej z Środkowo-zachodniego rynku energii elektrycznej w Stanach Zjednoczonych.

Ostatnie Godzinowe Dane Dotyczące Wiatru

Teraz chcę nałożyć na Czerwono ostatnie dwa dni obserwacji. To powinno być łatwe, ale nie mogę dowiedzieć się, dlaczego dostaję błąd.

Każda pomoc byłaby bardzo doceniam to.

Poniżej przedstawiamy 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
 93
Author: Kara, 2013-05-10

3 answers

Kiedy dodajesz nowy zestaw danych do geomu, musisz użyć argumentu data=. Lub umieścić argumenty w odpowiedniej kolejności mapping=..., data=.... Spójrz na argumenty dla ?geom_line.

Tak więc:

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") 
 158
Author: Justin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-10 16:33:52

Inną przyczyną jest przypadkowe umieszczenie data=... wewnątrz aes(...) zamiast Na 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ę to zdarzyć, gdy prototypujesz polecenie plot za pomocą qplot(), które nie używa jawnego aes(), a następnie edytujesz / kopiujesz i wklejasz je do ggplot()

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

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

Szkoda, że komunikat o błędzie ggplot nie jest brakującym argumentem 'data'! zamiast tego tajemniczego nonsensu, ponieważ to właśnie często oznacza ta wiadomość.

 12
Author: smci,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-22 01:00:34

Może to również wystąpić, jeśli odwołujesz się do zmiennej w danych.rama, która nie istnieje. Na przykład, ostatnio zapomniałem powiedzieć ddply podsumować jedną z moich zmiennych, które 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 podsumowującej, i dostałem ten błąd.

 4
Author: Nova,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-05 13:47:41