如何添加一个透明箭头,将两点之间的颜色更改为R中的绘图?

时间:2012-06-19 18:46:56

标签: r plot colors transparent

我可以使用R中的箭头()函数绘制两个颜色之间的透明箭头吗?例如,箭头在一点开始为红色,在另一点开始逐渐变为蓝色(两个点都在数据帧的同一行)?如果是这样,怎么样?如果没有,是否还有另一个功能可以在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"))

希望这有帮助!

2 个答案:

答案 0 :(得分: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)

Sample Arrow Plot

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

答案 1 :(得分:2)

我意识到您已经查看了Justin引用的其他页面,但相信如果您发布了一个可行的示例,我们可以修改它以使用plotrix::color.scale.lines function。所有arrows功能与segments的调用非常相似。