Ggplot2'den gelen "sınıf geçersizliği" hatasıyla nasıl başa çıkılır?


101

Mevcut bir ggplot'a yeni bir satır yerleştirmeye çalışırken şu hatayı alıyorum:

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

Kodumun ilk kısmı iyi çalışıyor. Aşağıda, bir Ortabatı Birleşik Devletler elektrik enerjisi piyasasından "en son" saatlik rüzgar üretimi verilerinin bir görüntüsü bulunmaktadır.

Son Saatlik Rüzgar Verileri

Şimdi son iki güne değecek gözlemleri Red ile kaplamak istiyorum. Kolay olmalı ama neden bir hata aldığımı anlayamıyorum.

Herhangi bir yardım çok takdir edilecektir.

Aşağıda tekrarlanabilir bir örnek verilmiştir:

# 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

Yanıtlar:


165

Bir geom'a yeni bir veri kümesi eklediğinizde, data=bağımsız değişkeni kullanmanız gerekir . Veya argümanları doğru sıraya koyun mapping=..., data=.... Argümanlarına bir göz atın ?geom_line.

Böylece:

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

Veya:

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

1
ah bu biraz utanç verici !! ama bu hatayı bir daha asla yapmayacağım. Teşekkürler Justin
MikeTP

36
Hayır değil! ve evet yapacaksın! Seni doğru yöne yönlendirebildiğime sevindim ve şimdi gelecek nesil için burada.
Justin

13

Başka bir neden de yanlışlıkla dış yerine data=...içini aes(...)koymaktır:

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

Özellikle bu, plot komutunuzun prototipini oluşturduğunuzda olabilir qplot(), ki bu açık bir komut kullanmaz aes(), ardından düzenleyin / kopyalayıp yapıştırın.ggplot()

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

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

Yazık bir ggplot'un hata mesajı Eksik 'veri' argümanı değil! bu şifreli saçmalık yerine, çünkü bu mesajın genellikle anlamı budur.


4

Bu, data.frame'de var olmayan bir değişkene başvurursanız da ortaya çıkabilir. Örneğin, son zamanlarda ddply'ye geom_line'da çizgi rengini belirtmek için kullandığım değişkenlerimden biri ile özetlemesini söylemeyi unuttum. Sonra ggplot, özet tablosunda oluşturmadığım değişkeni nerede bulacağını bilmiyordu ve bu hatayı aldım.


6
Bu hata, ggplot'u + ile yönlendirmeyi unutursanız da meydana gelebilir. Yanlışlıkla dplyr'ın%>% operatörünü kullandım ve ggplot grafiği tamamlamak için gereken satırları alamadı.
Dan Jarratt
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.