6

xyplot从包中使用lattice,我绘制了多年的时间序列。我想为其中一些年份添加一个阴影区域,以表明这段时间是“特殊的”(例如战争)。

如果这是微不足道的,请道歉,但我不知道该怎么做,所以如果有人可以帮助我,或者至少为我指出正确的方向,我会很高兴。我认为我的主要问题是我真的不知道如何解决这个问题。我对 R 还是比较陌生,lattice尤其是对。

这是一个最小的例子:

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

在相应的图中,我希望从x绘图区域的底部到顶部的背景颜色(从 45 到 65 的值)用浅灰色进行着色。

请注意,到目前为止我发现的解决方案使用base图形和polygon-function,但其目的是在曲线下方或上方遮蔽区域,这与我想要做的不同。我不“只是”想遮蔽线以下或线以上的区域。相反,我想在给定的时间间隔内为整个背景着色。

如果有人可以在这里帮助我,我将不胜感激!

4

3 回答 3

8

参见?panel.xblockslatticeExtra 包:

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

在此处输入图像描述

于 2013-08-30T16:46:20.307 回答
4

试试这个:

 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参数看起来像你喜欢的那样。

于 2013-08-30T16:30:52.470 回答
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 波段的中心放置在“原始坐标”中,并将宽度计算为“范围(xlim)/范围(波段)”,并修改现有图。该grid.rect函数是网格包较低级别的函数,由panel.rect. 当我在系统内集成格子面板时,我有时会发现这很有用xyplot

于 2013-08-30T16:31:23.277 回答