2013-08-30 2 views
5

lattice 패키지의 xyplot을 사용하여 몇 년 동안 시계열을 그립니다. 이 기간 중 일부가 '특별'(예 : 전쟁) 이었음을 나타 내기 위해 음영 처리 된 영역을 추가하고 싶습니다.R의 xyplot에서 음영 처리 된 배경을 얻는 방법?

사과를 드려 죄송 합니다만, 그렇게하는 법을 알 수 없으므로 누군가 나를 도울 수 있거나 적어도 올바른 방향으로 나를 가리켜 주면 행복 할 것입니다. 내 주요 문제는 내가이 문제에 접근하는 방법을 모른다는 것입니다. 나는 아직도 상대적으로 R에 익숙하지 않고, 특히 lattice에 대해서만 새삼 스럽다. 여기

최소한 예 : 해당 플롯

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

는, I는 플로팅 영역의 상단 (말부터 65까지 45 x -values) 밑에서을 배경색 싶습니다 연한 회색으로 음영 처리하십시오.

지금까지 발견 한 솔루션은 base 그래픽과 - 기능을 사용합니다. 그러나 의도하는 바는 내가하고 싶은 것과 다른 커브 아래 또는 그 이상의 영역을 음영 처리하는 것입니다. 나는 "단지"내 라인 아래 또는 내 라인 위에 그늘을 보이고 싶지 않습니다. 대신 주어진 시간 간격 동안 전체 배경을 어둡게하고 싶습니다.

누군가 나를 도와 줄 수 있다면 매우 감사 할 것입니다.

답변

8

는 latticeExtra 패키지에 ?panel.xblocks를 참조하십시오

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

다소 강력합니다. 'y = x> 45 & y <0'은 x = 45의 왼쪽에 회색 띠를 얻지 만, y <0의 경우에만 띠를 얻습니다. 나는'under = TRUE'의 기본값을 가지고 있기 때문에 당신이'layer_'를 사용하기로 결정했다고 생각합니까? –

+1

그냥 재밌고 ggplot2-ish 인 것처럼 보였지만 기존의 패널 함수에서 사용할 수 있습니다 :'xyplot (rnorm (100) ~ x, type = "l", col = "black", panel = function (x, ...) {panel.xblocks (x, x> 20, col = "lightgrey"); panel.xyplot (x, ...)})'. –

3

이것을 시도 :

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,...) 
    } 
) 

panel.rect() 함수는 사각형을 제어하고 rect() 함수의 격자 동일하다. 유용하게 사용할 수있는 다양한 설정이 있습니다. 먼저 호출 한 다음 xyplot()을 맨 위에 놓습니다. ybottomytop 매개 변수가 마음에 드는 것처럼 보이기 위해서는 조금만 놀아야합니다.

+0

와우, 감사들, 즉 빠른했다. 귀하의 솔루션은 확실히 나를 도웁니다. 그들은 또한 저에게 몇몇 새로운 것들을 가르쳐 줍니 다. 그래서 나는이 웹 사이트를 좋아합니다! 나는 어느 시점에서 내가 충분히 능숙 해져서 여기에 기여할 수 있기를 바랍니다. 감사하고 좋은 주말 보내십시오! – coffeinjunky

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

이것은 @ JohnPaul의 해결책과 몇 가지 점에서 다릅니다 (나는 그의 대답이 더 좋다고 생각합니다). 이것은 "네이티브 좌표"에 배치하기 위해 원하는 X- 밴드의 중심을 사용하고 너비를 'range (xlim)/range (band)'로 계산하고 기존 플롯을 수정합니다. grid.rect 함수는 panel.rect에서 사용하는 그리드 패키지 하위 수준 함수입니다. 때때로 나는 xyplot 시스템 내부의 격자 패널을 통합 할 때 유용합니다.

관련 문제