ggplot2의 "데이터 클래스 비정상"오류를 처리하는 방법은 무엇입니까?


101

기존 ggplot에 새 줄을 오버레이하려고 시도하는 동안 다음 오류가 발생합니다.

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

내 코드의 첫 번째 부분이 잘 작동합니다. 아래는 미국 중서부 전력 시장의 "최근"시간별 풍력 발전 데이터 이미지입니다.

최근 시간별 바람 데이터

이제 지난 이틀 동안의 관찰을 Red로 오버레이하고 싶습니다. 쉽지만 오류가 발생하는 이유를 알 수 없습니다.

어떤 도움이라도 대단히 감사하겠습니다.

다음은 재현 가능한 예입니다.

# 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 2013 년

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의 오류 메시지가 Missing ' data'argument가 아닙니다 ! 이 비밀스러운 말도 안되는 말 대신에, 그것이이 메시지가 종종 의미하는 것이기 때문입니다.


4

존재하지 않는 data.frame의 변수를 참조하는 경우에도 발생할 수 있습니다. 예를 들어, 최근에 나는 geom_line에서 선 색상을 지정하기 위해 사용한 변수 중 하나로 요약하도록 ddply에게 말하는 것을 잊었습니다. 그런 다음 ggplot은 요약 테이블에서 생성하지 않은 변수를 어디서 찾을 수 있는지 몰랐고이 오류가 발생했습니다.


6
이 오류는 ggplot을 +로 파이프하는 것을 잊은 경우에도 발생할 수 있습니다. 실수로 dplyr의 %> % 연산자를 사용했는데 ggplot이 플롯을 완료하는 데 필요한 라인을 얻지 못했습니다.
Dan Jarratt
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.