2010-06-22 14 views
0

一個新手問題。 (新增信息)如何使用scatterplot/xyplot和POSIX時間對象創建多面板圖?

我有一組隨機收集的時間戳數據。我喜歡創建一個繪圖矩陣,但我無法使用散點圖或xyplot &時間對象創建。

我的數據

dataset$Time #POSIX time objects (no set sampling period) 
       #i built POSIX time objects by dataset$Time<-strptime(tt, "%H:%M:%OS") 
       #the origial string was formated like this 12:12:12.234 (HH:MM:SS:msec) 
dataset$d1, dataset$d2 #integers 
dataset$d3 #factor with 10 levels 

我可以做這些

plot(dataset$Time, dataset$d1) 
scatterplot(dataset$d1 ~ dataset$d2 | dataset$d3, data=dataset) 
xyplot(dataset$d1 ~ dataset$d2 | dataset$d3, data=dataset) 

然而,我不能做這些(在x軸POSIX時間目標)

scatterplot(dataset$d1 ~ dataset$Time | dataset$d3, data=dataset) 
xyplot(dataset$d1 ~ dataset$Time | dataset$d3, data=dataset) 

NEW INFO

Error in structure(.Internal(as.POSIXct(x, tz)), class = c("POSIXt", "POSIXct"), : invalid 'x' argument.

新信息)但這個作品(在y軸上的POSIX時間對象)

xyplot(dataset$Time ~ dataset$d1 | dataset$d3, data=dataset) 

相關,但不同的問題是hexbin。當時間對象被添加到hexbin時,hexbin中的圖不會在單位上顯示正確的時間格式。

bin<-hexbin(dataset$Time, dataset$d1) 
plot(bin)) 

我該怎麼辦?

感謝您的關注!

回答

2

這是一個工作示例。你可能已經弄錯了你的數據格式 - 你需要注意精確的數據格式。

首先,一個簡單的數據幀:

R> X <- data.frame(pt=Sys.Date()+0:4, x1=100+cumsum(rnorm(5)), 
+          x2=90+cumsum(rt(5,4))) 
R> X 
      pt  x1 x2 
1 2010-06-22 98.73 90.33 
2 2010-06-23 99.43 89.56 
3 2010-06-24 98.85 86.95 
4 2010-06-25 99.08 88.52 
5 2010-06-26 100.30 94.08 
R> 

這是所謂的形式lattice不使用。您需要將其轉換爲長格式的格式。我用stack()在這裏,你還可以使用cast()melt()reshape 包:

R> Y <- data.frame(pt=rep(X$pt,2), stack(X, select=c(x1,x2))) 
R> Y 
      pt values ind 
1 2010-06-22 98.73 x1 
2 2010-06-23 99.43 x1 
3 2010-06-24 98.85 x1 
4 2010-06-25 99.08 x1 
5 2010-06-26 100.30 x1 
6 2010-06-22 90.33 x2 
7 2010-06-23 89.56 x2 
8 2010-06-24 86.95 x2 
9 2010-06-25 88.52 x2 
10 2010-06-26 94.08 x2 
R> 

現在xyplot通話很簡單:

R> xyplot(values ~ pt | ind, data=Y, panel=panel.lines) 

,當然你可以使用更復雜的調節表達式。

+0

嗨德克! myabe,這是因爲本地化的差異,但我的時間對象顯示爲「2010-06-21 17:45:42」什麼是x1,x2和ind?謝謝! – user186477 2010-06-22 22:19:39

+1

我*現場創建了示例數據*,這就是爲什麼您獲得不同的時間值。這兩列是來自正態分佈和t分佈的隨機數的累積和。 – 2010-06-22 23:54:34

+0

問題不是數據格式,而是時間格式。看來R對於POSIXct和POSIXlt有點問題。謝謝! – user186477 2010-06-23 00:17:06

2

顯然R有一些問題處理的POSIX倍癮......它給我的錯誤:

Error in +.POSIXt (x[floor(d)], x[ceiling(d)]) : binary '+' is not defined for "POSIXt" objects

只是將它們轉換成數字,它應該工作。您可以隱藏相應的軸,後來用正確的日期

例如爲:

scatterplot(dataset$d1 ~ as.numeric(dataset$Time) | dataset$d3, data=dataset, xaxt="n") 
axis(1, at=as.numeric(dataset$Time), labels=dataset$Time, cex.axis=0.5) 
+0

嗨尼科! as.numeric()和as.POSIXct()讓我使用xyplot,但不使用scatterplot()。你有沒有使用汽車包裝的scatterplot()? – user186477 2010-06-23 00:51:27

+0

從時間戳表示時間的任何替代方法? – user186477 2010-06-23 01:33:09

+1

是的,我已經嘗試過使用散點圖,就像在我的答案中寫的示例一樣......可能是您如何創建/導入數據時出錯?你可以提供你的數據樣本嗎? – nico 2010-06-23 06:15:29

2

對於我來說只是工作重繪,所以你可能有一個壞格式的時間向量。當你致電class(dataset$Time)時,你會得到什麼?它應該包含「POSIXct」才能工作。

另一方面,如果您提供data=dataset,則不需要在公式中輸入dataset$

+0

mbq,你說得對。在下面的nico的幫助下,我能夠通過as.numeric()或as.POSIXct()來鑄造xyplot。然而,散點圖迄今爲止是一個不起眼的事情。謝謝!! – user186477 2010-06-23 00:49:36

相關問題