ggplot2からの「クラスunevalのデータ」エラーに対処する方法?


101

新しい行を既存のggplotにオーバーレイしようとすると、次のエラーが発生します。

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

私のコードの最初の部分はうまくいきます。以下は、米国中西部の電力市場からの「最近の」毎時の風力発電データの画像です。

最近の毎時風データ

ここで、過去2日間の観察結果を赤でオーバーレイします。簡単なはずですが、エラーが発生する理由がわかりません。

どんな援助でも大歓迎です。

以下は再現可能な例です。

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

特にqplot()、明示的なを使用しないでプロットコマンドのプロトタイプをaes()作成し、それを編集/コピーアンドペーストしてggplot()

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

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

これは残念ですggplotのエラーメッセージには'data'引数がありません!この不可解なナンセンスの代わりに、それはこのメッセージがしばしば意味することだからです。


4

これは、存在しないdata.frame内の変数を参照した場合にも発生する可能性があります。たとえば、最近、geom_lineで線の色を指定するために使用した変数の1つで要約するようにddplyに指示するのを忘れていました。次に、ggplotは、自分が作成していない変数をサマリーテーブルのどこに見つけるのかわからず、このエラーが発生しました。


6
このエラーは、ggplotを+でパイプするのを忘れた場合にも発生する可能性があります。誤ってdplyrの%>%演算子を使用しましたが、ggplotはプロットを完了するために必要な行を取得しませんでした。
ダンジャラット2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.