【问题标题】:How to deal with "data of class uneval" error from ggplot2?如何处理来自ggplot2的“类uneval数据”错误?
【发布时间】:2013-05-05 09:46:25
【问题描述】:

在尝试将新行覆盖到现有 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

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    当您向几何图形添加新数据集时,您需要使用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") 
    

    【讨论】:

    • 哎呀这有点尴尬!但我不会再犯这个错误了。谢谢贾斯汀
    • 不,不是!是的,你会的!很高兴我能引导你朝着正确的方向前进,现在它为后代而存在。
    【解决方案2】:

    另一个原因是不小心把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 的错误消息不是 缺少“数据”参数! 而不是这种神秘的废话,因为这就是该消息通常的含义。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 如果您忘记使用 + 管道 ggplot 也可能发生此错误。我不小心使用了 dplyr 的 %>% 运算符,而 ggplot 没有得到完成绘图所需的线条。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-21
      • 2013-04-25
      相关资源
      最近更新 更多