我有以下问题:
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之间。我尝试根据这篇文章(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")
答案 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)
给你: