2012-01-29 2 views
11

Ho questo file in formato CSV:R trama con un asse del tempo x: come forzare le etichette delle zecche ad essere i giorni?

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

La prima colonna è un timestamp, il secondo è un numero di pagine. Ho bisogno di tracciare il conteggio delle pagine sull'asse verticale e il timestamp sull'asse orizzontale.

I timestamp non sono regolarmente distanziati, ho un giorno in dicembre e due giorni di chiusura a gennaio.

Ho provato questo codice

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

e ho avuto una trama con un solo segno di spunta al centro dell'asse x e con l'etichetta "Jan": non è sbagliato, ma mi piacerebbe avere tre zecche con solo il numero del giorno e il mese.

ho cercato

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

ma nessun asse x è tracciata. Qualche idea? Grazie

risposta

12

avrei as.Date() tua timestamp in questo modo:

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

Questo funziona allora:

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

questo funzionerà:

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

Sostanzialmente in axis.POSIXct (si noti che si dispone delle date POSIXct nel proprio riquadro dati) si specifica dove avere gli assi (at) e quali sono le etichette.

In genere mi piace l'etichetta delle date verticale anziché orizzontale. Per ottenere che utilizzare par(las=2) prima della trama.

5

ho trovato questo: http://personality-project.org/r/r.plottingdates.html

che mi ha dato la mia soluzione ...

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") 

Le parti importanti essendo daterange e at=seq(..., by="day").

+0

Grazie, ho dovuto modificare lo snippet di codice per ottenere un risultato corretto: '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 (pagine ~ DateTime, dm, xaxt = "n") axis.POSIXct (1, at = seq (daterange [1], daterange [2], per = "giorno") , format = "% b% d") ' –

+1

@uvts_cvs Aah sì, la mia data/ora erano in colonne separate. Aggiornerà. – jozxyqk