2012-02-03 4 views
2

같은 줄거리에 여러 개의 "선"이 있어야합니다. 여러 데이터 포인트.R 스크립트, ggplot2 및 qplot, 동일한 그래프의 여러 시계열 선 그래프

예를 들어 'xa'및 'xb'데이터 요소를 어떻게 포함시킬 수 있습니까?

이것은 데이터 포인트 중 한 세트 만 가지고 있지만 두 개가 필요합니다. 이 스크립트를 어떻게 수정할 수 있습니까?

library(ggplot2) 

da <- c("2012-02-02 09:01:00", "2012-02-02 09:02:00", "2012-02-02 09:03:00") 
db <- c(0.4, 0.6, 0.5) 

xa <- c("2012-02-02 09:01:00", "2012-02-02 09:02:00", "2012-02-02 09:03:00") 
xb <- c(0.3, 0.43, 0.7) 

da2 <- as.POSIXct(da) 
dfx <- data.frame(da2, db) 

summary(dfx) 

png('time_data_errs6b.png', width=640, height=480) 
gg <- qplot(da2, db, colour='red')+ 
    opts(title = 'Requests App')+xlab('Time')+ylab('Requests') + 
    geom_line() 

print(gg) 
dev.off() 
+0

관측 : 'gg <- qplot (...)'문 (2015 년 6 월, R 버전 3.1.1)은 '오류 : 테마'를 대신 사용합니다. (무효, 버전 0.9.1에서 마지막으로 사용됨)'. 오류는'opts (title = 'Requests App')'의 사용을 참조합니다. 'opts' (이 문맥에서)의 직접적인 대체는'theme (plot.title = element_text (size = rel (2)) '과 같은 테마에 의해 선택적으로 수정 된'labs (title ='Requests App ' , color = "blue"))'. –

답변

5

나는 두 data.frames와 시간 변수에 의해 merge을 만들 것입니다.

> df.a<-data.frame(time=da, value.a=db) 
> df.b<-data.frame(time=xa, value.b=xb) 
> df.mix<-merge(df.a, df.b, by='time') 

> df.mix 
       time value.a value.b 
1 2012-02-02 09:01:00  0.4 0.30 
2 2012-02-02 09:02:00  0.6 0.43 
3 2012-02-02 09:03:00  0.5 0.70 

다음과 같이 긴 형식으로 변환하면 POSIXct로 변환하십시오.

> df.mix$time<-as.POSIXct(df.mix$time) 
> df.melt<-melt(df.mix, id.vars='time') 

ggplot의 긴 형식의 데이터와 거래 아주 잘, 그래서 그것의 보통 내 목표는 음모를 꾸미고 전에 meltmerge에 적합한 구조로 데이터를 얻을 수 있습니다.

> ggplot(df.melt, aes(x=time, y=value, colour=variable)) + geom_path() 

은 또한에 내 자신의 가독성에 대한 기본 ggplot보다는 qplot를 사용하여 좋아한다. 그러나 그것은 선호의 문제입니다.

+0

좋은 작품입니다. –

+0

이것은 매우 도움이되었습니다. 한 가지 질문 : qplot 대신 ggplot 사용에 대한 의견을 설명해 주시겠습니까? – amh

+0

복잡한 플롯을 만들 때, 모든 기하 구조에 공통된 변수와 개별 기하 구조를 구체화하기 위해'ggplot'을 사용하는 구문을 좋아합니다. 'ggplot (df, aes (x = time, y = value)) + geom_line (aes (color = some_category)) + geom_point (크기 (some_other_category))'는 도움이됩니까? 그렇지 않다면, 자신의 질문에 자유롭게 질문하십시오. – Justin

2

merge 또는 melt 데이터가 필요없는 훨씬 간단한 방법입니다.

df_a <- data.frame(time = da, value = db) 
df_b <- data.frame(time = xa, value = xb) 
ggplot(df_a, aes(x = as.POSIXct(time), y = value)) + 
    geom_line(col = 'red') + 
    geom_line(col = 'blue', data = df_b) 
+1

나는이 접근법이 더 복잡하다는 것을 알게됩니다. 그것은 두 개의 분리 된 기하 구조가 필요하며 범례가 필요하거나 두 가지 이상의 색칠 변수가 필요한 경우 훨씬 더 복잡합니다. 게시물의 질문에 대해서는 – Justin

+0

입니다. 적은 수의 작업과 코드 줄로 할 수있을 때 데이터를 '병합'한 다음 '녹여내는'방법이 정말 둥근 해결책이라고 생각합니다. 좀 더 일반적인 문제의 경우, 효율성 향상으로 효과를 볼 수 있습니다. – Ramnath

+0

사실,하지만 가르치는 순간을 포기하기가 어렵습니다! – Justin