阴影图中的某些区域 - 基线R中的线和点图的组合

时间:2012-10-24 15:34:21

标签: r graph base

我有以下问题:

set.seed(1234)
dis = seq(1, 800, 10)
 yvar = rnorm(length (dis), 50, 10)
myd <- data.frame (xvar = dis, yvar = yvar, yvarL = 
yvar - rnorm (length (yvar),5, 1), yvarU = yvar + rnorm (length (yvar), 5, 1))
plot(myd$xvar,myd$yvar,pch=19,cex=.75,col="blue")
points(myd$xvar,myd$yvarL,col="gray", pch=19,cex=.5)
points(myd$xvar,myd$yvarU,col="gray", pch=19,cex=.5)

Y有三个值 - Y,上限和下限。我想在轴上的两个间隔之间进行遮蔽。其余的图表只是点。假设的产品图应该相似(不完全)。

enter image description here

如何在两个间隔之间遮挡并产生线图,例如在myd $ xvar中650到690和210到280之间。我尝试根据这篇文章(shading within xy curve plot in R)做一些polygot拟合,但没有成功。

polygon(c(myd$xvar[1:200], myd$xvar[200:1]), c(myd$xvar[1:200],
   myd$yvar[200:1]), col="gray")

2 个答案:

答案 0 :(得分:4)

你的数据存在的一个问题是myd只有80个观测值,但是你试图绘制200个......只需将x变量两次输入polygon()(一次按原样,一次反向顺序),那么y变量(首先是下限,然后是相反的上限)。然后你有你的阴影:

polygon(c(myd$xvar[20:40], myd$xvar[40:20]),c(myd$yvarL[20:40],
 myd$yvarU[40:20]), col="gray")

但是,阴影将覆盖一些点,因此您必须重新绘制它们:

points(myd$xvar,myd$yvar,pch=19,cex=.75,col="blue")
points(myd$xvar,myd$yvarL,col="gray", pch=19,cex=.5)
points(myd$xvar,myd$yvarU,col="gray", pch=19,cex=.5)

编辑:下面的rfan要求基于x坐标而不是索引进行着色,并在阴影区域中添加一条线。为此,提取相关点的索引是有意义的(我们使用myd $ xvar进行排序):

index <- which(myd$xvar>=200 & myd$xvar<=400)

然后我们根据这个索引进行绘图,如果需要,我们可以轻松修改:

polygon(c(myd$xvar[index], myd$xvar[rev(index)]),c(myd$yvarL[index], 
 myd$yvarU[rev(index)]), col="gray")

现在,添加一行和附加点:

lines(myd$xvar[index],myd$yvar[index],pch=19,cex=.75,col="blue",type="o")
points(myd$xvar,myd$yvarL,col="gray", pch=19,cex=.5)
points(myd$xvar,myd$yvarU,col="gray", pch=19,cex=.5)

答案 1 :(得分:2)

Stephan的相似答案:

plot(myd$xvar,myd$yvar,pch=19,cex=.75,col="blue")
points(myd$xvar,myd$yvarL,col="gray", pch=19,cex=.5)
points(myd$xvar,myd$yvarU,col="gray", pch=19,cex=.5)
polygon(c(smyd$xvar[1:nrow(smyd)], smyd$xvar[nrow(smyd):1]), 
 c(smyd$yvarL[1:nrow(smyd)], smyd$yvarU[nrow(smyd):1]), col="gray", border = NA)
points(smyd$xvar,smyd$yvar,col="red", pch=19,cex=1.5)
lines (smyd$xvar,smyd$yvar,col="red", pch=19,cex=1.5)

polygon(c(smyd1$xvar[1:nrow(smyd1)], smyd1$xvar[nrow(smyd1):1]),
c(smyd1$yvarL[1:nrow(smyd1)], smyd1$yvarU[nrow(smyd1):1]), col="yellow", border = NA)
points(smyd1$xvar,smyd1$yvar,col="green4", pch=19,cex=1.5)
lines (smyd1$xvar,smyd1$yvar,col="green4", pch=19,cex=1.5)

给你:  enter image description here