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

Answers:


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
不,这不对!是的,你会的!很高兴我可以引导您朝正确的方向发展,现在为您提供后代服务。
贾斯汀

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'参数!而不是这种神秘的废话,因为这就是该消息通常的意思。


4

如果您在data.frame中引用一个不存在的变量,也会发生这种情况。例如,最近我忘记告诉ddply总结我在geom_line中用于指定线条颜色的变量之一。然后,ggplot不知道从哪里可以找到我在汇总表中未创建的变量,并且出现了此错误。


6
如果您忘记用+传递ggplot,也可能发生此错误。我不小心使用了dplyr的%>%运算符,并且ggplot没有获得完成绘图所需的线。
Dan Jarratt
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.