我可以使用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"))
希望这有帮助!
答案 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)
箭头的颜色与color.scale.arrow
中给出的'结束'颜色相匹配。
答案 1 :(得分:2)
我意识到您已经查看了Justin引用的其他页面,但相信如果您发布了一个可行的示例,我们可以修改它以使用plotrix::color.scale.lines function
。所有arrows
功能与segments
的调用非常相似。