2011-11-17 2 views
3

J'ai une liste de valeurs dans une matrice où les dimensions sont de semaine en semaine (donc chaque valeur représente un jour spécifique dans une semaine). Les semaines sont en ordre croissant et les jours sont définis par leur nom (par exemple "Vendredi"). Je voudrais transformer cela en intrigue et je pense que la meilleure façon de le faire est de le démêler pour que les valeurs de la matrice soient listées dans l'ordre par jour calendrier, en commençant par un jour spécifié.Tracer des valeurs de semaine/jour dans R

Exemple:

Friday Monday Thursday 
w1 5  3  2 
w2 1  7  1 
w3 2  10  9 

-> (par lundi): (3, 2, 5, 7, 1, 1, 10, 9, 2)

Comment puis-je faire proprement dans R? Et si vous avez une autre idée sur la façon de mieux présenter les données, n'hésitez pas à en parler.

Répondre

1

Personnellement, j'utiliser Reshape (ou reshape2) pour faire fondre vos données dans le format Semaine, Jour, Valeur, puis tracer cela.

#Your data 
foo<-matrix(data=c(5,1,2,3,7,10,2,1,9), 
     nrow=3, ncol=3, 
     dimnames=list(c("w1", "w2", "w3"), c("Friday", "Monday", "Thursday"))) 

#Convert to Data frame 
bar<-as.data.frame(foo) 
bar$week<-rownames(bar) 

#Melt 
library(reshape) 
melteddata<-melt(data=bar, measure.vars=c("Friday", "Monday", "Thursday")) 

#Plot 
library(ggplot2) 
qplot(data=melteddata, x=week, y=value, colour=variable, geom="point") 
+0

C'était génial. Existe-t-il un moyen d'augmenter la taille de l'axe des y afin que les points soient plus clairement séparés? Aussi, si j'essaie d'utiliser geom = "line" (pour faire des lignes reliant les points au sein de chaque jour), l'intrigue ne montre rien. Une idée pourquoi? – user592419

+0

ggplot a beaucoup d'options, consultez http://had.co.nz/ggplot2/ pour plus d'informations. Je suis sûr que vous pouvez utiliser ylim pour définir les valeurs y et min. Je pense que pour geom line, vous avez besoin d'une variable de groupe, essayez group = variable, color = variable – PaulHurleyuk

2

?matplot est votre ami et est parfaitement adapté pour le travail: il trace chacune des colonnes d'une matrice dans une couleur distincte. Ensuite, vous pouvez, par exemple, ajouter une légende avec ?legend (astuce: vous pouvez passer "topleft" et similaire au premier argument: groovy) pour montrer quelle couleur représente quel jour.

1

Si votre matrice est m:

# get the days into the correct order: delete the days you don't need 
m <- m[, c("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday")] 
m <- as.numeric(m) 
7

Je certainement démêler vos données et les mettre sous la forme d'une série chronologique. Si les tracés habituels ne sont pas adaptés à vos besoins, vous pouvez jeter un oeil à la fonction très propre calendarheat.R. Ci-dessous un exemple de sortie (occupation quotidienne de l'hôtel). Voyez à quel point les effets du week-end sont bien présentés, l'effet de Pâques, la saison estivale et la baisse d'occupation à la fin de l'année. (Je légèrement édité la fonction de sorte que les jours de la semaine et les mois sont en espagnol.)

Modifier 2011-11-18 (répondant à une demande de code):

J'invoque la fonction calendarHeat par un fonction enveloppe, MuestraCalendario, qui sélectionne simplement une plage de dates et ajoute un titre à l'intrigue:

MuestraCalendario <- function(obs, 
           main="", 
           desde="2000-01-01", 
           hasta="2004-12-31") { 
    scratch <- window(obs,start=as.Date(desde),end=as.Date(hasta)) 
    calendarHeat(dates=index(scratch), 
      values=as.vector(coredata(scratch)), 
      varname=main, 
      color="r2b") 
} 

« obs » est une série temporelle dans le format défini par zoo package. L'intrigue de la figure a été générée avec

MuestraCalendario(obs, 
        main=NULL, 
        desde="2005-01-01", 
        hasta="2009-12-31") 

enter image description here

+0

Cool. Merci pour l'astuce du chapeau. Cela vous dérange-t-il d'inclure votre code R pour générer cela? – user592419

+0

J'ai modifié le message pour afficher le code. La majeure partie est dans le lien vers calendarHeat.R. –

Questions connexes