2012-04-13 34 views
7

Tôi có khung dữ liệu với một cột là ngày/giờ (được lưu trữ nội bộ dưới dạng số) và các cột khác dưới dạng số/số nguyên và tôi muốn vẽ dữ liệu theo ngày/giờ.Vẽ dữ liệu theo thời gian trong R

Ngày/giờ trong khung dữ liệu được điền bằng cách sử dụng như sau.

as.POSIXct(strptime(time, '%H:%M:%S %p %m/%d/%Y',tz='GMT')) 

class(table$time)numeric.

  1. Làm cách nào để vẽ và hiển thị dữ liệu trong trục x dưới dạng ngày có thể đọc ở một số định dạng.
  2. Làm cách nào để vẽ lô hàng của hàng và không phải tất cả các hàng Ví dụ: các hàng giữa dateTime1dateTime2 trong đó dateTime1dateTime2 là ngày được cung cấp ở định dạng nhất định.
+1

Bạn có thể hiển thị biểu đồ dữ liệu của mình như thế nào không? Tôi gặp khó khăn khi hiểu 'thời gian' của bạn có thể là cả số và dạng '% H:% M:% S% p% m /% d /% Y' cùng một lúc. – plannapus

Trả lời

7

Dưới đây là một số dữ liệu giả:

data <- structure(list(time = structure(c(1338361200, 1338390000, 1338445800, 1338476400, 1338532200, 1338562800, 1338618600, 1338647400, 1338791400, 1338822000), class = c("POSIXct", "POSIXt"), tzone = ""), variable = c(168L, 193L, 193L, 201L, 206L, 200L, 218L, 205L, 211L, 230L)), .Names = c("time", "variable"), row.names = c(NA, -10L), class = "data.frame") 
data 
       time variable 
1 2012-05-30 09:00:00  168 
2 2012-05-30 17:00:00  193 
3 2012-05-31 08:30:00  193 
4 2012-05-31 17:00:00  201 
5 2012-06-01 08:30:00  206 
6 2012-06-01 17:00:00  200 
7 2012-06-02 08:30:00  218 
8 2012-06-02 16:30:00  205 
9 2012-06-04 08:30:00  211 
10 2012-06-04 17:00:00  230 

Để hiển thị ngày tháng và thời gian ở trên trục, bạn có thể sử dụng chức năng axis.POSIXct:

plot(data, xaxt="n") 
axis.POSIXct(side=1, at=cut(data$time, "days"), format="%m/%d") 

Bạn có thể kiểm soát nơi ve rơi với at (đối với chức năng thông thường axis ngoại trừ ở đây nó sẽ được cung cấp với các đối tượng của lớp POSIXct) và kiểm soát cách chúng sẽ xuất hiện với format.

Theo như subsetting là có liên quan, miễn là đối tượng dateTime1 và dateTime2 của bạn cũng là đối tượng POSIXct bạn có thể làm điều đó như bạn sẽ làm bất kỳ loại khác của subsetting.

dateTime1 <- strptime("00:00 05/31/2012", format="%H:%M %m/%d/%Y") 
dateTime2 <- strptime("3 Jun 2012 05-30", format="%d %b %Y %H-%M") 
data[data$time < dateTime2 & data$time > dateTime1, ] 
       time variable 
3 2012-05-31 08:30:00  193 
4 2012-05-31 17:00:00  201 
5 2012-06-01 08:30:00  206 
6 2012-06-01 17:00:00  200 
7 2012-06-02 08:30:00  218 
8 2012-06-02 16:30:00  205 
10

Bạn cũng có thể sử dụng ggplot2, cụ thể hơn geom_point hoặc geom_line (lưu ý rằng tôi sử dụng dữ liệu ví dụ từ @plannapus):

require(ggplot2) 
theme_set(theme_bw()) # Change the theme to my preference 
ggplot(aes(x = time, y = variable), data = data) + geom_point() 

enter image description here

hoặc sử dụng một hình học đường:

ggplot(aes(x = time, y = variable), data = data) + geom_line() 

enter image description here

ggplot2 tự động nhận ra kiểu dữ liệu của trục x là ngày và vẽ trục phù hợp.

+0

+1 thực sự là cách thuận tiện hơn tôi. Có cách nào để kiểm soát định dạng nhãn hoặc vị trí của chúng nếu cần? – plannapus

+1

Có, bạn có thể sử dụng 'scale_x_date' hoặc' scale_x_datetime' để chỉnh tỷ lệ. Xem tài liệu của họ để biết một số ví dụ. –

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