2012-02-02 21 views
5

tôi có các dữ liệu sau:Đặt lưới cùng ngày dấu kiểm

x=strptime(20010101:20010110) 
y=1:10 
z=data.frame(x,y) 

Vì vậy, dữ liệu của tôi là thế này:

  x y 
1 2001-01-01 1 
2 2001-01-02 2 
3 2001-01-03 3 
4 2001-01-04 4 
5 2001-01-05 5 
6 2001-01-06 6 
7 2001-01-07 7 
8 2001-01-08 8 
9 2001-01-09 9 
10 2001-01-10 10 

Khi tôi tạo ra một âm mưu trong cơ sở sử dụng:

plot(x,y) 
grid(NULL,NULL) 

Lưới dọc của tôi không thẳng hàng với dấu tick ngày. Tôi biết điều này có vẻ giống như một vấn đề khá đơn giản, nhưng tôi đã không tìm thấy một giải pháp cho bất cứ nơi nào. Có cách nào để có được những lưới dọc để phù hợp với các dấu ngày đánh dấu sử dụng cơ sở mà không yêu cầu tôi làm điều này:

abline(v=as.numeric(strptime(c(20010102,20010104,20010106,20010108,20010110),'%Y%m%d'))) 

Tôi có rất nhiều lô với các ngày khác nhau và tôi thực sự muốn tự động điều này càng nhiều càng tốt, hy vọng sử dụng cơ sở.

Trả lời

3

abline có thể trích xuất ngày ticks từ vector POSIXlt của bạn (thông qua strptime).

x=strptime(20010101:20010110,format="%Y%m%d") 
y=1:10 

plot(x,y) 
grid(nx=NA, ny=NULL) 
abline(v=axis.POSIXct(1, x=pretty(x)),col = "lightgray", lty = "dotted", lwd = par("lwd")) 

Tôi khuyên bạn nên tạo chức năng của riêng bạn sẽ thêm cả lưới ngang và dọc.

my.grid <-function(){ 
grid(nx=NA, ny=NULL) 
abline(v=axis.POSIXct(1, x=pretty(x)),col = "lightgray", lty = "dotted", lwd = 
par("lwd")) 
} 

plot(x,y) 
my.grid() 
1

Tôi không quen với sự phức tạp của các ô cơ bản. Nhưng, ggplot thực hiện điều này một cách hiệu quả.

x <- strptime(20010101:20010110, format='%Y%m%d') 
y <- 1:10 
z <- data.frame(x, y) 
qplot(x,y,data=z,'point') 
6

Vẽ các trục, dấu và nhãn và trả về vị trí đánh dấu là vectơ.

Vì bạn có Date dữ liệu, bạn cần phải sử dụng axis.Date để làm điều này, và sau đó sử dụng abline để vẽ lưới:

z=data.frame(
    x=seq(as.Date("2001-01-01"), by="+1 month", length.out=10) 
    y=1:10 
) 
plot(y~x, data=z) 
abline(v=axis.Date(1, z$x), col="grey80") 

enter image description here

+0

Cảm ơn bạn đã thay thế này! Tôi thích cách có 80 cách khác nhau để làm mọi thứ trong R :) – thequerist

3

Như file ?grid giúp đỡ cho biết, "nếu có nhiều tinh chỉnh là bắt buộc, [bạn có thể] sử dụng trực tiếp abline(h = ., v = .) ". Đó là một chút công việc nhiều hơn, nhưng không nhiều, và sẽ được dễ dàng, đủ để quấn lên trong một chức năng nếu bạn muốn sử dụng nó thường xuyên.

Dưới đây là một cách để làm điều đó:

plot(x,y) 
abline(v = pretty(extendrange(z$x)), 
     h = pretty(extendrange(z$y)), 
     col = 'lightgrey', lty = "dotted") 
points(x,y, pch=16) 

enter image description here

+0

Cảm ơn, làm thế nào bạn có được thông tin về những gì extendrange làm gì? Tôi ước tôi có thể chấp nhận nhiều hơn một câu trả lời, tôi đưa nó cho P Lapointe vì anh ta cũng bổ sung chức năng cho anh ta. – thequerist

+0

Không sao cả. Chỉ cần kiểm tra '? Extendrange' để tìm hiểu thêm một chút. Đó là một hàm được sử dụng bằng cách vẽ các hàm để xác định độ dài của trục x và trục. (So ​​sánh 'cốt truyện (1:10)' và 'cốt truyện (1:10, xaxs =" i ")' để xem ý tôi là gì.) –

+0

Cảm ơn, tôi tiếp tục gõ '? Extend_ed_range' và tự hỏi tại sao tôi lại chẳng đi đến đâu cả . – thequerist