2012-01-29 2 views
11

mam tego pliku w formacie csv:Wykres R z osią czasu x: jak wymusić na etykietach kleszcze dni?

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

pierwszej kolumnie jest datownik, drugi to liczba stron. Potrzebuję wykreślić liczbę stron na osi pionowej i znacznik czasu na osi poziomej.

Znaczniki czasu nie są rozmieszczone w regularnych odstępach czasu, mam jeden dzień w grudniu i dwa dni w styczniu.

Próbowałem ten kod

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

i mam działkę z jednego kleszcza na środku osi x i z etykietą „Jan”: nie jest źle, ale chciałbym mieć trzy kleszczy z tylko numerem dnia i miesiąca.

Próbowałem

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

ale nie oś x jest naniesiona. Każdy pomysł? Dziękuję

Odpowiedz

12

bym as.Date() swój timestamp tak:

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

Działa to wówczas:

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

to będzie działać:

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

Zasadniczo w (pamiętaj, że masz daty POSIXct w ramce danych) określasz, gdzie mają być zaznaczone oś (at) i jakie są etykiety.

Zazwyczaj podoba mi się moja etykieta dat raczej w pionie niż w poziomie. Aby to wykorzystać, przed działką należy użyć par(las=2).

5

Znalazłem to: http://personality-project.org/r/r.plottingdates.html

który dał mi rozwiązanie ...

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

ważnych częściach będąc daterange i at=seq(..., by="day").

+0

Dziękuję, musiałem zmienić twój fragment kodu, aby uzyskać poprawny wynik: 'dm = read.csv (" my_data.csv ", sep =", ", head = TRUE) dm $ DateTime <- as.POSIXct (dm $ timestamp, format = "% Y-% m-% dT% H:% M:% S") daterange = c (jako.POSIXlt (min (dm $ DateTime)), as.POSIXlt (max (dm $ DateTime))) działka (strony ~ DateTime, dm, xaxt = "n") axis.POSIXct (1, at = seq (daterange [1], daterange [2], by = "day") , format = "% b% d") ' –

+1

@ uvts_cvs Aah yep, moja data/czas były w oddzielnych kolumnach. Zaktualizuję. – jozxyqk