2013-08-30 59 views
5

sử dụng xyplot từ gói lattice, tôi vẽ một chuỗi thời gian trong một số năm. Tôi sẽ thêm khu vực bóng mờ cho một số năm trong số này để cho biết rằng khoảng thời gian này là "đặc biệt" (ví dụ: chiến tranh).Làm thế nào để có được nền mờ trong xyplot trong R?

Hãy xin lỗi nếu điều này là tầm thường, nhưng tôi không thể tìm ra cách để làm điều đó, vì vậy tôi sẽ rất vui nếu ai đó có thể giúp tôi hoặc ít nhất là hướng tôi đi đúng hướng. Tôi nghĩ vấn đề chính của tôi là tôi không thực sự biết cách tiếp cận vấn đề này. Tôi vẫn còn tương đối mới đối với R, và đặc biệt là lattice.

Dưới đây là một ví dụ nhỏ:

xyplot(rnorm(100) ~ 1:100, type="l", col="black") 

Trong cốt truyện tương ứng, tôi muốn màu sắc của nền (từ nói x -values ​​45 đến 65) từ dưới lên phía trên cùng của khu vực âm mưu được tô đậm, ví dụ, màu xám nhạt.

Lưu ý rằng các giải pháp mà tôi đã tìm thấy cho đến nay sử dụng base đồ họa và polygon chức năng, nhưng có ý định che khu vực dưới hoặc phía trên đường cong, khác với những gì tôi muốn làm. Tôi không "chỉ" muốn che khu vực bên dưới dòng của tôi, hoặc trên dòng của tôi. Thay vào đó, tôi muốn tô bóng toàn bộ nền trong một khoảng thời gian nhất định.

Nếu có ai có thể giúp tôi ở đây, tôi sẽ rất biết ơn!

Trả lời

8

Xem ?panel.xblocks trong gói latticeExtra:

library(latticeExtra) 
x <- 1:100 
xyplot(rnorm(100) ~ x, type="l", col="black") + 
     layer_(panel.xblocks(x, x > 20, col = "lightgrey")) 

enter image description here

+0

Xuất hiện khá mạnh mẽ. 'y = x> 45 & y <0' cho bạn các dải màu xám ở bên trái x = 45, nhưng chỉ ở vị trí y <0. Tôi nghĩ bạn đã chọn sử dụng 'layer_' vì nó có mặc định là' under = TRUE'? –

+1

Nó chỉ có vẻ khá tiện lợi và ggplot2-ish nhưng xen kẽ người ta có thể sử dụng nó trong một chức năng bảng thông thường: 'xyplot (rnorm (100) ~ x, type =" l ", col =" black ", bảng = chức năng (x, ...) {panel.xblocks (x, x> 20, col = "lightgrey"); panel.xyplot (x, ...)}) '. –

3

Hãy thử điều này:

xyplot( 
    rnorm(100) ~ 1:100, type="l", col="black", 
    panel=function (x,y,...){ 
    panel.rect(xleft=45, xright=65,ybottom=-3, ytop=3,col="grey") 
    panel.xyplot(x,y,...) 
    } 
) 

Chức năng panel.rect() điều khiển hình chữ nhật và là mạng tương đương với rect() chức năng. Nó có nhiều cài đặt mà bạn có thể thấy hữu ích. Nó được gọi là đầu tiên và sau đó các xyplot() được đặt trên đầu trang của nó. Bạn cần phải chơi một chút để có được các thông số ybottomytop của mình để trông giống như bạn thích.

+0

Wow, nhờ guys, đó là nhanh chóng. Giải pháp của bạn chắc chắn giúp tôi. Họ cũng dạy tôi một số điều mới, đó là lý do tại sao tôi yêu trang web này! Tôi hy vọng vào một thời điểm nào đó tôi sẽ thành thạo, đủ để đóng góp ở đây! Cảm ơn và chúc bạn một ngày cuối tuần vui vẻ! – coffeinjunky

3
trellis.focus("panel", 1, 1) 
grid.rect(x =.55, , y=.5, w = .2, height=6, 
    gp = gpar(fill = "light grey")) 
trellis.unfocus() 

Điều này khác với @ giải pháp JohnPaul trong một vài cách (và tôi nghĩ rằng câu trả lời của ông là tốt hơn). Điều này sử dụng trung tâm của X-band mong muốn cho vị trí trong "tọa độ bản địa" và tính toán chiều rộng là 'phạm vi (xlim)/phạm vi (ban nhạc)' và nó sửa đổi một âm mưu hiện có. chức năng grid.rect là các gói lưới chức năng cấp thấp hơn được sử dụng bởi panel.rect. Đôi khi tôi thấy điều này hữu ích khi tích hợp các bảng mạng bên trong hệ thống xyplot đánh bại tôi.