Come creare multi-pannelli trame con dispersione / xyplot e oggetti time POSIX?
-
28-09-2019 - |
Domanda
Una domanda newbie. (Aggiunto nuovo INFO)
Ho una serie di dati in tempo timbrato che sono stati raccolti in modo casuale. Mi piace creare una matrice di trame, ma non ho potuto creare utilizzando grafico a dispersione o xyplot & tempo gli oggetti.
I miei dati
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
.
posso fare questi
plot( dataset$Time, dataset$d1)
scatterplot(dataset$d1 ~ dataset$d2 | dataset$d3, data=dataset)
xyplot(dataset$d1 ~ dataset$d2 | dataset$d3, data=dataset)
Tuttavia, non posso fare queste (oggetto ora POSIX in asse x)
scatterplot(dataset$d1 ~ dataset$Time | dataset$d3, data=dataset)
xyplot(dataset$d1 ~ dataset$Time | dataset$d3, data=dataset)
( NUOVO INFO )
Errore nella struttura (.internal (as.POSIXct (x, tz)), class = c ( "POSIXt", "POSIXct"),:. Non valido 'x' argomento
( NUOVO INFO ), ma funziona questo (POSIX oggetto volta in asse y)
xyplot(dataset$Time ~ dataset$d1 | dataset$d3, data=dataset)
legati, ma questione diversa è hexbin. Quando gli oggetti di tempo vengono aggiunti al hexbin, la trama dal hexbin non mostra il formato dell'ora corretta sulle unità.
bin<-hexbin(dataset$Time, dataset$d1)
plot(bin))
Che cosa devo fare?
Grazie per la ricerca in esso !!
Soluzione
Ecco un esempio di lavoro. Si può avere ottenuto i vostri formati di dati sbagliati -. Uno ha bisogno di essere attenti circa i formati di dati precisi
In primo luogo, una semplice trama di dati:
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>
Questo è il cosiddetto di larghezza reticolo non usa. Hai bisogno di trasformarlo in formato molto . Io uso stack()
qui, è anche possibile utilizzare cast()
e melt()
dalla rimodellare
Pacchetto:
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>
Ora la chiamata xyplot
è semplicemente:
R> xyplot(values ~ pt | ind, data=Y, panel=panel.lines)
e si può di utilizzo ovviamente molto più complicato espressioni condizionata.
Altri suggerimenti
A quanto pare R abbia qualche problema si occupano di tossicodipendenza a volte POSIX ... mi dà l'errore:
Errore in
+.POSIXt
(x [piano (d)], x [soffitto (D)]): binary '+' non è definito per "POSIXt" oggetti
semplicemente gettato a numerico e dovrebbe funzionare. È possibile nascondere l'asse corrispondente e ridisegnare in un secondo momento con le date corrette
per esempio:.
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)
Per me è solo funziona, così si ha probabilmente un vettore tempo in un formato errato. Che cosa si ottiene quando si chiama class(dataset$Time)
? Dovrebbe contenere "POSIXct" per questo al lavoro.
D'altra parte, non c'è bisogno di mettere in dataset$
formula se si fornisce data=dataset
.