2012-02-03 183 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)生成'錯誤:使用'主題'。 (Defunct;最後在版本0.9.1中使用)'。錯誤指的是使用'opts(title ='Requests App')'。看起來,直接替換'opts'(在這個上下文中)是'labs(title ='Requests App')',可以選擇修改主題,如theme(plot.title = element_text(size = rel(2) ,color =「blue」))'。 – 2015-06-19 22:23:45

回答

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

不錯,有效。 – 2012-02-03 15:52:38

+0

這非常有幫助。一個問題:你能否解釋你對使用ggplot而不是qplot的評論? – amh 2012-04-19 00:28:02

+0

當我構建一個複雜的情節時,我喜歡使用'ggplot'來建立所有幾何體和單個幾何體共有的變量來分配它們的細節。 'ggplot(df,aes(x = time,y = value))+ geom_line(aes(color = some_category))+ geom_point(aes(size = some_other_category))'有幫助嗎?如果沒有,請隨時提出您自己的問題,然後我會加入。 – Justin 2012-04-19 01:24:47

2

這裏是一個更簡單的方法,不需要mergemelt數據。

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

我覺得這種方法更復雜。它需要兩個獨立的geom,如果你需要一個圖例或者需要兩個以上的着色變量,它會顯得更加複雜。 – Justin 2012-02-03 17:15:36

+0

對於這篇文章中的問題,我認爲這是一個真正的「合併」,然後是「熔化」數據的完整解決方案,當你可以使用更少的操作和代碼行時。對於更普遍的問題,是的,效率增益可能會得到回報。 – Ramnath 2012-02-03 17:37:28

+0

確實如此,但難以彌補一個可教時刻! – Justin 2012-02-03 17:38:10

相關問題