Як поводитися з помилкою "дані нерівності класу" від ggplot2?


101

Під час спроби накласти новий рядок на існуючий ggplot я отримую таку помилку:

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

Перша частина мого коду працює чудово. Нижче наведено зображення "останніх" годинних даних про вироблення вітру з ринку електроенергії в Середньому Заході США.

Останні дані про погодинний вітер

Тепер я хочу накреслити спостереження за останні два дні в Червоному. Це повинно бути легко, але я не можу зрозуміти, чому я отримую помилку.

Будь-яка допомога буде дуже вдячна.

Нижче наведено відтворюваний приклад:

# 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

Відповіді:


165

коли ви додаєте новий набір даних до geom, вам потрібно використовувати data=аргумент. Або навести аргументи в належному порядку mapping=..., data=.... Погляньте на аргументи для ?geom_line.

Таким чином:

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

Або:

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

1
ой такий вид бентежить !! але я ніколи не зроблю цю помилку знову. Дякую Джастіну
MikeTP

36
Ні це не так! і так, ти будеш! Радий, що я можу направити вас у правильному напрямку, і тепер це тут для нащадків.
Джастін

13

Ще одна причина - випадкове введення data=...всередину, aes(...)а не зовні:

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

Зокрема, це може статися, коли ви прототипуєте свою команду plot qplot(), яка не використовує явний текст aes(), а потім редагуйте / скопіюйте та вставте її вggplot()

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

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

Шкода, що повідомлення про помилку ggplot не є аргументом "даних"! замість цієї дурної дурниці, бо саме це повідомлення часто означає.


4

Це також може статися, якщо ви посилаєтесь на змінну в data.frame, яка не існує. Наприклад, нещодавно я забув сказати ddply, щоб узагальнити одну зі своїх змінних, яку я використовував у geom_line для визначення кольору рядка. Тоді ggplot не знав, де знайти змінну, яку я не створив у підсумковій таблиці, і отримав цю помилку.


6
Ця помилка також може статися, якщо ви забудете подати ggplot з +. Я випадково використав оператор dplyr%>% і ggplot не отримав рядки, необхідні для завершення графіку.
Dan Jarratt
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.