如何处理 ggplot2 中的 "data of class uneval" 错误?

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
3个回答

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
哎呀,那有点尴尬!但我再也不会犯这个错误了。谢谢 Justin。 - MikeTP
36
不,不是这样的!是的,你会做到的!很高兴我能帮你指明正确的方向,现在它留存了下来。 - Justin

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

特别是当您使用qplot()原型制作绘图命令时(该命令不使用显式的aes()),然后将其编辑/复制并粘贴到ggplot()中时,就会发生这种情况

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

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

很遗憾,ggplot的错误消息不是缺少"data"参数!而是一些晦涩难懂的东西,因为这条消息通常意味着缺少"data"参数。


4

如果您引用了数据框中不存在的变量,则可能会出现此错误。例如,最近我忘记告诉ddply按照我在geom_line中用于指定线条颜色的变量进行汇总。然后,ggplot不知道在摘要表中找到我未创建的变量,因此我收到了这个错误。


6
如果你忘记使用 ggplot 的 + 符号,也会出现这个错误。我不小心使用了 dplyr 的 %>% 运算符,导致 ggplot 没有得到完成图形所需的线条。 - Dan Jarratt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接