-3

我可以使用 R 中的 arrow() 函数在改变颜色的两点之间绘制透明箭头吗?例如,一个箭头在一个点开始为红色,然后在另一点逐渐变为蓝色(两个点在数据框中的同一行上)?如果是这样,怎么做?如果没有,是否有另一个函数可以在 R 中做到这一点?

这是我到目前为止的一段代码,它绘制点(蓝色和红色)并用透明的蓝色箭头将蓝色点与红色点连接起来:

par(xpd=NA, mfrow=c(1,1), mar=c(4.25,3.2,6.20,3.55))
plot(data$x1,data$y1,col="red",pch=20,cex=0.6,xlim=c(xmin,xmax),ylim=c(ymin,ymax),axes=FALSE,ann=FALSE,xaxt='n',yaxt='n')
par(new=T)
plot(data$x2,data$y2,col="blue",pch=20,cex=0.6,xlim=c(xmin,xmax),ylim=c(ymin,ymax),axes=FALSE,ann=FALSE,xaxt='n',yaxt='n')
par(new=T)
plot(grid.picture(NLmap[-1]),xlim=c(xmin,xmax),ylim=c(ymin,ymax),axes=FALSE,ann=FALSE,xaxt='n',yaxt='n')
par(new=T)

points(data$x1,data$y1,col="red",pch=20,cex=0.25)
par(new=T)
points(data$x2,data$y2,col="blue",pch=20,cex=0.25)
par(new=T)

arrows(data$x1,data$y1, data$x2, data$y2, length = 0.05, angle = 30, 
   code = 2, col = "#9AC0CD40", lty = par("lty"), lwd = par("lwd"))

希望这可以帮助!

4

2 回答 2

3

首先,我要提一下,我的答案直接来自评论中提供的信息和 DWin 的答案。我以前从未见过这些功能,所以我想我会试一试。

我最终创建了一个小功能,arrows除了添加了色标外,它的工作原理类似。我认为这基本上是你想要的。

require(plotrix)

color.scale.arrow = function(x1,y1,x2,y2,first.col,second.col,
lwd= par('lwd'),lty=par('lty'),angle=30,length=0.25) {
        x=mapply(seq,x1,x2,length.out=256) # Each column is one arrow
        y=mapply(seq,y1,y2,length.out=256) # Each column is one arrow

        arrows(x[255,],y[255,],x[256,],y[256,],
               col=ifelse(y[256,]<y[255,],first.col,second.col),
               lwd=lwd,lty=lty,angle=angle,length=length)

        rgb1=col2rgb(first.col)[,1] / 255
        rgb2=col2rgb(second.col)[,1] / 255
        cols=rbind(rgb1,(rgb1 + rgb2) / 2,rgb2)

        invisible(
              sapply(seq(ncol(x)),function(line) 
                  color.scale.lines(x[,line],y[,line],
                  cols[,'red'],cols[,'green'],cols[,'blue'],
                  lwd=lwd,lty=lty)
              )
       )
}

# Create sample data
set.seed(1)
x <- runif(12); y <- rnorm(12)
i <- order(x,y); x <- x[i]; y <- y[i]
x1=x[s]
x2=x[s+1]
y1=y[s]
y2=y[s+1]

# Plot sample data
plot(x,y, main='', type='n')
color.scale.arrow(x1,y1,x2,y2,'red','blue',lwd=2)

示例箭头图

箭头的颜色与 中给出的“结束”颜色相匹配color.scale.arrow

于 2012-06-29T21:23:46.883 回答
2

我意识到您已经查看了贾斯汀引用的其他页面,但相信如果您发布了一个使用段的可行示例,我们将能够对其进行修改以使用plotrix::color.scale.lines function. 毕竟arrows函数与调用非常相似segments

于 2012-06-19T19:30:37.010 回答