จะจัดการกับข้อผิดพลาด "data of class unval" จาก 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

คำตอบ:


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()ซึ่งไม่ได้ใช้ Explicit 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.