2015-02-13 25 views
5

Considerate questo esempio:Utilizzando lubridate e ggplot2 in modo efficace per l'asse data

library(ggplot2) 
library(lubridate) 

set.seed(4) 
date <- seq(from = as.POSIXct("2012-01-01"), to = as.POSIXct("2014-12-31"), by = "days") 
value <- c(rnorm(274, 50, 1), rnorm(274, 55, 1), rnorm(274, 55, 2), rnorm(274, 60, 2)) 
df  <- data.frame(date, value) 

head(df) 
#   date value 
# 1 2012-01-01 50.21675 
# 2 2012-01-02 49.45751 
# 3 2012-01-03 50.89114 
# 4 2012-01-04 50.59598 
# 5 2012-01-05 51.63562 
# 6 2012-01-06 50.68928 

ggplot(df, aes(x=yday(date), y=value, color=factor(year(date)))) + 
    geom_line() 

che genera questa trama:

Plot

Quali sono alcuni modi per rendere l'asse formattato come una data per mese ? Sto cercando di determinare un modo pulito per sfruttare sia lubridate e scale_x_date se possibile?

Forse ci sono modi migliori per creare questo tipo di grafico? Cioè, creando fattori per anno e tracciandoli l'uno sull'altro? (NOTA: non voglio usare facet_wrap o facet_grid per questo esempio).

risposta

8

Una soluzione potrebbe essere quella di aggiungere una colonna al tuo dataframe che conterrà per ogni riga il giorno e il mese in un altro anno (la stessa per tutte le righe), ad esempio l'anno 2015.

df$days<-as.Date(format(df$date,"%d-%m-2015"),format="%d-%m-%y") 

È possono poi tracciare con questa colonna come x

library(scales) 
ggplot(df, aes(x=days, y=value, color=factor(year(date)))) + 
    geom_line()+scale_x_date(labels = date_format("%b")) 

enter image description here

Edit: semplificato la linea df$days

Problemi correlati