R图插值时间序列图中的不同颜色?

R图插值时间序列图中的不同颜色?,r,plot,R,Plot,有人能帮我吗。我有一个数据集,它有我用zoo插值的NA值。我添加了一个“颜色列”,希望可以创建一个线条图(时间序列),其中插值以与线条其余部分不同的颜色绘制。也就是说,由插值点前后的点定义的直线段应为红色,而不是黑色 我在这里附上了一个表格示例(其中颜色为“红色”定义了已插值的值)。到目前为止,我还将图形的图像和所需的输出放在这里: 这是到目前为止我的代码。代码的“行”部分是我希望将颜色定义为数据框中的列的地方: par(mfrow=c(2,1), mar=c(4,4.5,2,2), mgp=

有人能帮我吗。我有一个数据集,它有我用zoo插值的NA值。我添加了一个“颜色列”,希望可以创建一个线条图(时间序列),其中插值以与线条其余部分不同的颜色绘制。也就是说,由插值点前后的点定义的直线段应为红色,而不是黑色

我在这里附上了一个表格示例(其中颜色为“红色”定义了已插值的值)。到目前为止,我还将图形的图像和所需的输出放在这里:

这是到目前为止我的代码。代码的“行”部分是我希望将颜色定义为数据框中的列的地方:

par(mfrow=c(2,1), mar=c(4,4.5,2,2), mgp=c(2,0.6,0))
x.limit <- round(range(UN.GRACE.Int$DecimDate), 2)
plot(NULL, type="n", xlim=x.limit, ylim=c(-20, 25), xlab="Year", ylab="GRACE-TWS (cm)",     axes=F)
box(lwd=1.5)
abline(h=0, col="gray50", lty=1)
axis(1, seq(2003, 2012, 1), cex.axis=0.8)
axis(2, seq(-20, 25, 5), las=1, cex.axis=0.8)
minor.tick(nx=4, ny=0, tick.ratio=0.5) 
lines(UN.GRACE.Int[,2] ~ UN.GRACE.Int[,1], type="l", lwd=3, col=UN.GRACE.Int[,3])
tws.slope <- round(as.vector(coef(lm(UN.GRACE.Int[,2] ~ UN.GRACE.Int[,1]))[2]), 2)
tws.sdev <- round(as.vector(coef(summary(lm(UN.GRACE.Int[,2] ~ UN.GRACE.Int[,1])))[,  "Std. Error"][2]), 2)
abline(lm(UN.GRACE.Int[,2] ~ UN.GRACE.Int[,1]), lwd=2.5, lty=2, col=2)
mtext(paste("Trend (cm/year): ", tws.slope, "±", tws.sdev, sep=""), cex=0.8, side=1,  line=-1.1) 
par(mfrow=c(2,1),mar=c(4,4.5,2,2),mgp=c(2,0.6,0))

x、 限制如果我理解正确,您希望插值点以不同的颜色显示。您可以使用R中的
type=“o”
选项来完成此操作,该选项提供了过度绘制的线。下面是一些调整后的代码,可以生成下面的图。我去掉了minor.tick命令,因为它一定来自我没有的包,但在其他情况下它工作正常(在本地机器上使用R2.15.3)

您会注意到,我只是直接打印项目,而不是将plot调用为NULL,然后添加行。这大大简化了代码。您可以在plot调用中使用
pch
参数来更改使用的符号,还可以根据需要更改
lwd
参数。事实上,对于插值,您可以很容易地为
pch
指定不同的值,就像您使用颜色一样-它接受向量作为参数

par(mar=c(4,4.5,2,2), mgp=c(2,0.6,0))
x.limit <- round(range(UN.GRACE.Int$DecimDate), 2)
plot(UN.GRACE.Int[,2] ~ UN.GRACE.Int[,1],
     type="o",
     pch=18,
     col=UN.GRACE.Int[,3],
     xlim=x.limit,
     ylim=c(-20, 25),
     xlab="Year",
     ylab="GRACE-TWS (cm)",
     axes=F)
box(lwd=1.5)
abline(h=0, col="gray50", lty=1)
axis(1, seq(2003, 2012, 1), cex.axis=0.8)
axis(2, seq(-20, 25, 5), las=1, cex.axis=0.8)
tws.slope <- round(as.vector(coef(lm(UN.GRACE.Int[,2] ~ UN.GRACE.Int[,1]))[2]), 2)
tws.sdev <- round(as.vector(coef(summary(lm(UN.GRACE.Int[,2] ~ UN.GRACE.Int[,1])))[,  "Std. Error"][1]), 2)
abline(lm(UN.GRACE.Int[,2] ~ UN.GRACE.Int[,1]), lwd=2.5, lty=2, col=2)
mtext(paste("Trend (cm/year): ", tws.slope, "±", tws.sdev, sep=""), cex=0.8, side=1,  line=-1.1)

所以,您希望得到一行作为输出,而不是两行,我理解正确吗?你能分享一下你的想法吗(即使是画画也可以)。是的,这就是我需要的:)这里有一张图片:你如何决定要着色的线段的长度?这确实是一件棘手的事情,你可以在下面看到我的答案,但它们都会给点涂上颜色。编辑:进一步考虑,最好的方法是在第一行的顶部多画一行如果你需要的话,你需要将参数输入到
line()
。谢谢你的回答-我意识到线段的长度可能很难绘制。这似乎是最明智的答案,所以谢谢!长度是否始终是到下一点的距离?如果是这样,我可以在解决方案中进行编辑…我认为这是相对可行的。
par(mar=c(4,4.5,2,2), mgp=c(2,0.6,0))
x.limit <- round(range(UN.GRACE.Int$DecimDate), 2)
plot(UN.GRACE.Int[,2] ~ UN.GRACE.Int[,1],
     type="l",
     pch=18,
     col="black",
     xlim=x.limit,
     ylim=c(-20, 25),
     xlab="Year",
     ylab="GRACE-TWS (cm)",
     axes=F)
box(lwd=1.5)
abline(h=0, col="gray50", lty=1)
axis(1, seq(2003, 2012, 1), cex.axis=0.8)
axis(2, seq(-20, 25, 5), las=1, cex.axis=0.8)
tws.slope <- round(as.vector(coef(lm(UN.GRACE.Int[,2] ~ UN.GRACE.Int[,1]))[2]), 2)
tws.sdev <- round(as.vector(coef(summary(lm(UN.GRACE.Int[,2] ~ UN.GRACE.Int[,1])))[,  "Std. Error"][3]), 2)
abline(lm(UN.GRACE.Int[,2] ~ UN.GRACE.Int[,1]), lwd=2.5, lty=2, col=2)
mtext(paste("Trend (cm/year): ", tws.slope, "±", tws.sdev, sep=""), cex=0.8, side=1,  line=-1.1)
points(x=UN.GRACE.Int[UN.GRACE.Int$Col.CSR=="red",1],
       y=UN.GRACE.Int[UN.GRACE.Int$Col.CSR=="red",2],
       pch=16,
       col="red")
par(mar=c(4,4.5,2,2), mgp=c(2,0.6,0))
x.limit <- round(range(UN.GRACE.Int$DecimDate), 2)
plot(UN.GRACE.Int[,2] ~ UN.GRACE.Int[,1],
     type="l",
     pch=18,
     col="black",
     xlim=x.limit,
     ylim=c(-20, 25),
     xlab="Year",
     ylab="GRACE-TWS (cm)",
     axes=F)
box(lwd=1.5)
abline(h=0, col="gray50", lty=1)
axis(1, seq(2003, 2012, 1), cex.axis=0.8)
axis(2, seq(-20, 25, 5), las=1, cex.axis=0.8)
tws.slope <- round(as.vector(coef(lm(UN.GRACE.Int[,2] ~ UN.GRACE.Int[,1]))[2]), 2)
tws.sdev <- round(as.vector(coef(summary(lm(UN.GRACE.Int[,2] ~ UN.GRACE.Int[,1])))[,  "Std. Error"][5]), 2)
abline(lm(UN.GRACE.Int[,2] ~ UN.GRACE.Int[,1]), lwd=2.5, lty=2, col=2)
mtext(paste("Trend (cm/year): ", tws.slope, "±", tws.sdev, sep=""), cex=0.8, side=1,  line=-1.1)

line_segs <- cbind(lstart=UN.GRACE.Int[which(UN.GRACE.Int$Col.CSR=="red")-1,c("DecimDate","CSR")],
                   lend=UN.GRACE.Int[which(UN.GRACE.Int$Col.CSR=="red")+1,c("DecimDate","CSR")])

for(x in 1:nrow(line_segs)) {

    lines(x=c(line_segs[x,1],line_segs[x,3]),
          y=c(line_segs[x,2],line_segs[x,4]),
          lwd=3,
          col="red")
}