6

我有以下问题:

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、上置信度和下置信度。我想在轴上的两个间隔之间着色。图表的其余部分仅是点。假设的产品图应该是相似的(不完全是)。

在此处输入图像描述

如何在 myd$xvar 中在 650 到 690 和 210 到 280 之间的两个区间之间着色和生成线图。我尝试根据这篇文章进行一些多边形拟合(在 R 中的 xy 曲线图中着色),但没有成功。

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

2 回答 2

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)
于 2012-10-24T16:08:20.130 回答
2

与斯蒂芬类似的答案:

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)

给你: 在此处输入图像描述

于 2012-10-24T19:19:10.520 回答