Trazar series de tiempo con tags de fecha en el eje x

Sé que esta pregunta puede ser un cliché, pero estoy teniendo dificultades para hacerlo.

Tengo el conjunto de datos en el siguiente formato:

     Visitas de fecha

     01/11/2010 696537
     2/11/2010 718748
     3/11/2010 799355
     11/4/2010 805800
     05/11/2010 701262
     6/11/2010 531579
     7/11/2010 690068
     8/11/2010 756947
     9/11/2010 718757
     10/11/2010 701768
     11/11/2010 820113
     11/12/2010 645259

Quiero crear un gráfico de series de tiempo, con eje x que representa vists de tiempo y eje y. Además, quiero marcar el eje x con la fecha. El código que estaba usando es el siguiente:

dm$newday = as.POSIXct(strptime(dm$Day, format="%Y-%m-%d")) plot(as.Date(dm$day),dm$visits) axis.Date(1,Day,at=seq(as.Date("2010/10/30"), as.Date("2011/01/29"),by="days")) 

1) Como los tiempos son fechas, asegúrese de usar la clase "Date" , no "POSIXct" o "POSIXlt" . Consulte R News 4/1 para obtener consejos e intente esto donde Lines se define en la Nota al final. No se usan paquetes aquí.

 dm <- read.table(text = Lines, header = TRUE) dm$Date <- as.Date(dm$Date, "%m/%d/%Y") plot(Visits ~ Date, dm, xaxt = "n", type = "l") axis(1, dm$Date, format(dm$Date, "%b %d"), cex.axis = .7) 

El uso de text = Lines es solo para mantener el ejemplo autocontenido y en realidad sería reemplazado por algo como "myfile.dat" . (continúa después de la imagen)

captura de pantalla

2) Dado que se trata de una serie temporal, es posible que desee utilizar una representación de serie temporal que proporcione un código ligeramente más simple:

 library(zoo) z <- read.zoo(text = Lines, header = TRUE, format = "%m/%d/%Y") plot(z, xaxt = "n") axis(1, dm$Date, format(dm$Date, "%b %d"), cex.axis = .7) 

Dependiendo de cómo quiera que se vea la ttwig, puede ser suficiente utilizar el plot(Visits ~ Date, dm) en el primer caso o el plot(z) en el segundo caso, suprimiendo por completo el comando del axis .

Nota:

 Lines <- "Date Visits 11/1/2010 696537 11/2/2010 718748 11/3/2010 799355 11/4/2010 805800 11/5/2010 701262 11/6/2010 531579 11/7/2010 690068 11/8/2010 756947 11/9/2010 718757 11/10/2010 701768 11/11/2010 820113 11/12/2010 645259" 

Me gusta usar ggplot2 para este tipo de cosas:

 df$Date <- as.Date( df$Date, '%m/%d/%Y') require(ggplot2) ggplot( data = df, aes( Date, Visits )) + geom_line() 

enter image description here

Tu código tiene muchos errores.

  • Estás mezclando dm$Day y dm$day . Probablemente no es lo mismo
  • Sus encabezados de columna son Date y Visits . Entonces tendrías acceso a ellos (supongo) como dm$Date y dm$Visits
  • En el campo de fecha, tiene %Y-%m-%d esto debe ser %m/%d/%Y

El siguiente código debe trazar lo que desea:

 dm$newday = as.Date(dm$Date, "%m/%d/%Y") plot(dm$newday, dm$Visits) 

Puede rotar las fechas pirateando las notaciones de los ejes con texto ()

 Lines <- "Date Visits 11/1/2010 696537 11/2/2010 718748 11/3/2010 799355 11/4/2010 805800 11/5/2010 701262 11/6/2010 531579 11/7/2010 690068 11/8/2010 756947 11/9/2010 718757 11/10/2010 701768 11/11/2010 820113 11/12/2010 645259" dm <- read.table(textConnection(Lines), header = TRUE) dm$Date <- as.Date(dm$Date, "%m/%d/%Y") plot(Visits ~ Date, dm, xaxt = "n", type = "l") axis(1,at=NULL, labels=F) text(x = dm$Date, par("usr")[3]*.97, labels = paste(dm$Date,' '), srt = 45, pos = 1, xpd = TRUE,cex=.7) 

Es posible en ggplot y puedes usar scale_date para esta tarea

  library(ggplot2) Lines <- "Date Visits 11/1/2010 696537 11/2/2010 718748 11/3/2010 799355 11/4/2010 805800 11/5/2010 701262 11/6/2010 531579 11/7/2010 690068 11/8/2010 756947 11/9/2010 718757 11/10/2010 701768 11/11/2010 820113 11/12/2010 645259" dm <- read.table(textConnection(Lines), header = TRUE) dm <- mutate(dm, Date = as.Date(dm$Date, "%m/%d/%Y")) ggplot(data = dm, aes(Date, Visits)) + geom_line() + scale_x_date(format = "%b %d", major = "1 day") 

Me gusta ggplot también.

Aquí hay un ejemplo:

 df1 = data.frame( date_id = c('2017-08-01', '2017-08-02', '2017-08-03', '2017-08-04'), nation = c('China', 'USA', 'China', 'USA'), value = c(4.0, 5.0, 6.0, 5.5)) ggplot(df1, aes(date_id, value, group=nation, colour=nation))+geom_line()+xlab(label='dates')+ylab(label='value') 

enter image description here