如何在R中的xyplot图表中设置阴影背景?

6
使用lattice包中的xyplot函数,我绘制了几年的时间序列。我想添加一些阴影区域来表示这段时间是“特殊”的(例如战争)。如果可以有人帮助我解决问题或指点一下方向,我会非常感激。抱歉如果这看起来很基础,但我无法解决这个问题。我的主要问题在于我不知道如何解决这个问题。我对R和lattice还比较新。

以下是一个最简示例:

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

在对应的图中,我想让背景颜色(从 x 值为 45 到 65)从绘图区域底部到顶部呈浅灰色。请注意,我目前找到的解决方案使用基础图形和多边形函数,但那里的意图是阴影下面或上面的曲线区域,这与我想做的不同。我不仅仅想要遮盖我的线条下面或上面的区域。相反,我想为给定的时间间隔遮盖整个背景。如果有人能帮助我解决这个问题,我将非常感激!
3个回答

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


看起来相当强大。y=x > 45 & y <0 可以在 x=45 左侧得到灰色带,但仅限于 y<0 的情况下。我认为你选择使用 layer_ 是因为它默认为 under=TRUE - IRTFM
1
它看起来相当不错,有点像ggplot2,但也可以在传统的面板函数中使用:xyplot( rnorm(100) ~ x, type="l", col="black", panel = function(x, ...) { panel.xblocks(x, x > 20, col = "lightgrey"); panel.xyplot(x, ...) }) - G. Grothendieck

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参数,以使其看起来符合您的要求。


哇,谢谢大家,你们真快。你们的解决方案确实帮了我很多。它们还教会了我一些新东西,这就是我喜欢这个网站的原因!我希望在某个时候我能够熟练到足以自己为这里做出贡献!谢谢并祝你们周末愉快! - 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-band的中心来放置“本地坐标”,并将宽度计算为'range(xlim)/ range(band)',并修改现有图。 grid.rect函数是grid包中较低级别的函数,由panel.rect使用。当我集成lattice面板在xyplot系统内无法完成时,我有时会发现这很有用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接