Comment créer des tracés multi-panneaux avec scatterplot / xyplot et objets temps POSIX?
-
28-09-2019 - |
Question
Une question de débutant. (AJOUTÉE INFO NOUVEAU)
J'ai un ensemble de données horodatées qui ont été recueillis au hasard. J'aime créer une matrice de parcelles, mais je ne pouvais pas créer à l'aide soit scatterplot ou des objets xyplot et temps.
mes données
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
.
je peux faire ces
plot( dataset$Time, dataset$d1)
scatterplot(dataset$d1 ~ dataset$d2 | dataset$d3, data=dataset)
xyplot(dataset$d1 ~ dataset$d2 | dataset$d3, data=dataset)
Cependant, je ne peux pas faire ces (objet temps dans Posix axe x)
scatterplot(dataset$d1 ~ dataset$Time | dataset$d3, data=dataset)
xyplot(dataset$d1 ~ dataset$Time | dataset$d3, data=dataset)
( NEW INFO )
Erreur dans la structure (.Internal (as.POSIXct (x, tz)), class = c ( "POSIXt", "POSIXct"):. Invalide 'x' argument
( NEW INFO ) mais cela fonctionne (objet de temps à y Posix axe)
xyplot(dataset$Time ~ dataset$d1 | dataset$d3, data=dataset)
liés, mais la question est différente hexbin. Lorsque des objets de temps sont ajoutés à hexbin, l'intrigue du hexbin ne montre pas le format heure sur les unités.
bin<-hexbin(dataset$Time, dataset$d1)
plot(bin))
Que dois-je faire?
Merci pour la recherche en elle !!
La solution
Voici un exemple de travail. Vous pouvez avoir obtenu vos formats de données erronées -. Il faut être prudent sur les formats de données précises
Tout d'abord, un simple trame de données:
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>
Ceci est ce qu'on appelle large réseau ne pas utiliser. Vous devez la transformer en long format. J'utilise stack()
ici, vous pouvez également utiliser cast()
et melt()
de la Reshape
package:
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>
Maintenant, l'appel xyplot
est simplement:
R> xyplot(values ~ pt | ind, data=Y, panel=panel.lines)
et vous pouvez l'utilisation des cours beaucoup plus compliqué expressions de conditionnement.
Autres conseils
Il semble que R a un problème face à la dépendance des temps ... il me POSIX donne l'erreur:
Erreur dans
+.POSIXt
(x [étage (d)], x [plafond (d)]): binaire '+' ne sont pas définis pour les objets "POSIXt"
il suffit de les jeter à numérique et il devrait fonctionner. Vous pouvez masquer l'axe correspondant et redessiner plus tard avec les dates exactes
par exemple:.
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)
Pour moi, il fonctionne exactement, vous a probablement un vecteur de temps dans un mauvais format. Qu'est-ce que vous obtenez lorsque vous appelez class(dataset$Time)
? Il devrait contenir « POSIXct » pour que cela fonctionne.
Par contre, vous n'avez pas besoin de mettre dataset$
dans la formule si vous fournissez data=dataset
.