2014-03-13 18 views
6

Ich versuche, eine Zeitreihe boxplot mit ggplot2.Wie man eine Zeitreihe boxplot in R

Ich habe monatliche Werte für viele Personen.

Ich muss ein TimeSeries Boxplot von Monat mit meinen Daten machen.

Ich denke, dass mein Problem ist, wie man einen Faktor (Monat) mit meinen Daten erstellt.

p <- ggplot(mydata, aes(factor(date), measure)) 

enter image description here

+0

Soweit ich weiß, verwenden Boxplots kategoriale Daten als x-Achse. Effektiv würde dies das Datum in ein Etikett und nicht in ein Datum verwandeln, wodurch die Information weggerissen würde. Ich bin mir nicht sicher, ob es eine Möglichkeit gibt, die Zeit auf der X-Achse korrekt zu zeichnen, so dass der Abstand (Kadenz?) Der Zeit erhalten bleibt. –

+0

So etwas zu machen: ! [Http://i.imgur.com/bM6Lyje.png] – fandreacci

Antwort

1

Aktualisiert: Basierend auf Klärung der OP, dass mehrere Jahre getrennt behandelt werden müssen.

library(ggplot2) 

#generate dummy data 
date_range <- as.Date("2010/06/01") + 0:400 
measure <- runif(401) 
mydata <- data.frame(date_range, measure) 

# create new columns for the months and years, and 
# and a year_month column for x-axis labels 
mydata$month <- format(date_range, format="%b") 
mydata$year <- as.POSIXlt(date_range)$year + 1900 
mydata$year_month <- paste(mydata$year, mydata$month) 
mydata$sort_order <- mydata$year *100 + as.POSIXlt(date_range)$mon 

#plot it 
ggplot(mydata) + geom_boxplot(aes(x=reorder(year_month, sort_order), y=measure)) 

Welche produziert: enter image description here

Hope this Sie vorwärts hilft bewegen.

+0

Dank Ram, es hat funktioniert. Es ist jedoch Gruppierung aller verschiedenen Jahre in den gleichen Monaten. Meine Daten reichen von 2010 bis 2011, also brauche ich 2 "jan, feb, mar ...". Irgendwelche Ideen? – fandreacci

+0

Ich habe meine Antwort so aktualisiert, dass jedes "Jahr-Monat" einzeln und nicht gruppiert dargestellt wird. –

8

Ein anderer Weg, dies zu tun, ohne zu Datumsformat ändern zu müssen und führen Sie einen Sortier usw. das Datum als eine Gruppierungsfaktor wie so einfach hinzufügen ist:

ggplot(mydata) + geom_boxplot(aes(x = date, y = measure, group = date))

0

ich eine Funktion zu erstellen die Handlung, die du brauchst.

die Funktion ist:

ts_plot_season <- function(x = x) { 
season <- cycle(x) 
season.factor <- factor(season) 
ggplot() + 
    geom_boxplot(mapping = aes(x = season.factor, 
          y = x)) + 
    labs(x = "Periodo", y = "Serie") 
} 

Fox Beispiel:

ts_plot_season(AirPassengers) 

Boxplot for time series

ich diese Hilfe hoffen. Ich weiß, dass diese Frage alt ist, aber ich konnte keine Antwort im Internet finden. Also ich denke, das wird jemandem helfen.

Verwandte Themen