Bagaimana cara menangani error "data of class uneval" dari ggplot2?


101

Ketika mencoba untuk melapisi baris baru ke ggplot yang ada, saya mendapatkan kesalahan berikut:

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

Bagian pertama dari kode saya berfungsi dengan baik. Di bawah ini adalah gambar data pembangkit tenaga angin "terbaru" per jam dari pasar tenaga listrik Amerika Serikat bagian Barat Tengah.

Data Angin Per Jam Terbaru

Sekarang saya ingin menampilkan pengamatan selama dua hari terakhir di Red. Ini seharusnya mudah tetapi saya tidak tahu mengapa saya mendapatkan kesalahan.

Bantuan apa pun akan sangat dihargai.

Di bawah ini adalah contoh yang dapat direproduksi:

# 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

Jawaban:


165

saat Anda menambahkan kumpulan data baru ke geom, Anda perlu menggunakan data=argumen. Atau letakkan argumen dalam urutan yang benar mapping=..., data=.... Lihat argumen untuk ?geom_line.

Jadi:

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

Atau:

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

1
Aduh itu memalukan !! tapi aku tidak akan pernah membuat kesalahan itu lagi. Terima kasih Justin
MikeTP

36
Tidak, tidak! dan ya kamu akan! Senang saya bisa mengarahkan Anda ke arah yang benar dan sekarang di sini untuk anak cucu.
Justin

13

Penyebab lainnya adalah secara tidak sengaja meletakkan bagian data=...dalam, aes(...)bukan bagian luar:

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

Secara khusus ini dapat terjadi ketika Anda membuat prototipe perintah plot Anda dengan qplot(), yang tidak menggunakan eksplisit aes(), lalu edit / salin-dan-tempelkan ke dalamggplot()

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

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

Sayang sekali pesan kesalahan ggplot bukanlah argumen 'data' yang hilang! bukannya omong kosong samar ini, karena itulah arti pesan ini sering kali.


4

Ini juga bisa terjadi jika Anda merujuk ke variabel di data.frame yang tidak ada. Misalnya, baru-baru ini saya lupa memberi tahu ddply untuk meringkas dengan salah satu variabel saya yang saya gunakan di geom_line untuk menentukan warna garis. Kemudian, ggplot tidak tahu di mana menemukan variabel yang belum saya buat di tabel ringkasan, dan saya mendapatkan kesalahan ini.


6
Kesalahan ini juga dapat terjadi jika Anda lupa menyalurkan ggplot dengan +. Saya tidak sengaja menggunakan operator%>% dplyr dan ggplot tidak mendapatkan garis yang diperlukan untuk menyelesaikan plot.
Dan Jarratt
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.