2012-01-29 9 views
11

que tiene este archivo en formato csv:R plot con un x eje de tiempo: cómo forzar las etiquetas de los ticks para que sean los días?

timestamp,pages 
2011-12-09T11:20:50.33,4 
2012-01-23T17:44:02.71,132 
2012-01-28T15:07:59.34,168 

La primera columna es una marca de tiempo, el segundo es un recuento de páginas. Necesito trazar el recuento de páginas en el eje vertical y la marca de tiempo en el eje horizontal.

Las marcas de tiempo no se espacian regularmente, tengo un día en diciembre y dos días en enero.

yo probamos este código

df = read.csv("my_data.csv") 
df$timestamp = strptime(df$timestamp, "%Y-%m-%dT%H:%M:%S") 
plot(df$timestamp,df$pages) 

y me dieron una parcela con una sola garrapata en el centro del eje X y con la etiqueta de "Jan": no está mal, pero me gustaría tener tres garrapatas con solo el día y el mes.

me trataron

plot(df$timestamp,df$pages,xaxt="n") 
axis.Date(1,df$timestamp,"days") 

pero ningún eje X se traza. ¿Alguna idea? Gracias

Respuesta

12

Me as.Date() su timestamp así:

df$timestamp = as.Date(strptime(df$timestamp, "%Y-%m-%dT%H:%M:%S")) 

Esto funciona a continuación:

plot(df$timestamp,df$pages,xaxt="n") 
axis.Date(1,at=df$timestamp,labels=format(df$timestamp,"%b-%d"),las=2) 

enter image description here

10

esto funcionará:

plot(df$timestamp,df$pages,xaxt="n") 
axis.POSIXct(1, at=df$timestamp, labels=format(df$timestamp, "%m/%d")) 

Esencialmente en axis.POSIXct (tenga en cuenta que tiene POSIXct fechas en su marco de datos) especifica dónde se encuentran las marcas de eje (at) y cuáles son las etiquetas.

Normalmente me gusta la etiqueta de fechas vertical en lugar de horizontal. Para obtener ese uso par(las=2) antes de la trama.

5

encontré esto: http://personality-project.org/r/r.plottingdates.html

Lo que me dio mi solución ...

dm = read.csv("my_data.csv", sep=",", head=TRUE) 
dm$DateTime <- as.POSIXct(dm$timestamp, format="%Y-%m-%dT%H:%M:%S") 
daterange=c(as.POSIXlt(min(dm$DateTime)), as.POSIXlt(max(dm$DateTime))) 
plot(pages ~ DateTime, dm, xaxt = "n") 
axis.POSIXct(1, at=seq(daterange[1], daterange[2], by="day"), format="%b %d") 

Las partes importantes son daterange y at=seq(..., by="day").

+0

Gracias, tuve que cambiar el fragmento de código para obtener un resultado adecuado: 'dm = read.csv (" my_data.csv ", sep =", ", head = TRUE) dm $ DateTime <- as.POSIXct (dm $ timestamp, format = "% Y-% m-% dT% H:% M:% S") daterange = c (as.POSIXlt (min (dm $ DateTime)), as.POSIXlt (max (dm $ DateTime))) plot (páginas ~ DateTime, dm, xaxt = "n") axis.POSIXct (1, at = seq (daterange [1], daterange [2], by = "día") , format = "% b% d") ' –

+1

@uvts_cvs Aah sí, mi fecha/hora estaba en columnas separadas. Actualizará. – jozxyqk

Cuestiones relacionadas