2012-01-29 34 views
11

Tôi có tập tin này ở định dạng csv:R cốt truyện với trục x thời gian: làm thế nào để buộc các nhãn ve là ngày?

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

Cột đầu tiên là một dấu thời gian, điều thứ hai là một số trang. Tôi cần vẽ số lượng trang trên trục tung và dấu thời gian trên trục hoành.

Dấu thời gian không được đặt cách nhau đều đặn, tôi có một ngày trong tháng mười hai kiến ​​hai ngày gần trong tháng một.

Tôi đã thử mã này

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

và tôi đã nhận một âm mưu chỉ với một cú đánh dấu vào giữa các trục x và với nhãn "Jan": đó là không sai nhưng tôi muốn có ba ve chỉ với số ngày và tháng.

tôi đã cố gắng

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

nhưng không có trục x được vẽ. Bất kỳ ý tưởng nào? Cảm ơn bạn

Trả lời

12

tôi sẽ as.Date() bạn timestamp như thế này:

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

này hoạt động thì:

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

này sẽ làm việc:

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

Về cơ bản trong axis.POSIXct (lưu ý rằng bạn có POSIXct ngày trong khung dữ liệu của mình), bạn chỉ định nơi có các dấu trục (at) và nhãn là gì.

Thông thường tôi thích nhãn ngày của mình dọc chứ không phải theo chiều ngang. Để sử dụng điều đó par(las=2) trước âm mưu.

5

Tôi thấy điều này: http://personality-project.org/r/r.plottingdates.html

nào đã cho tôi giải pháp của tôi ...

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

Các bộ phận quan trọng là daterangeat=seq(..., by="day").

+0

Cảm ơn bạn, tôi đã phải thay đổi đoạn mã của bạn để có được kết quả phù hợp: '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))) cốt truyện (trang ~ DateTime, dm, xaxt = "n") trục.POSIXct (1, tại = seq (daterange [1], daterange [2], by = "day") , format = "% b% d") ' –

+1

@uvts_cvs Aah yep, ngày/giờ của tôi ở các cột riêng biệt. Sẽ nâng cấp. – jozxyqk

Các vấn đề liên quan