Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何向R中的绘图添加一个在两点之间改变颜色的透明箭头?_R_Plot_Colors_Transparent - Fatal编程技术网

如何向R中的绘图添加一个在两点之间改变颜色的透明箭头?

如何向R中的绘图添加一个在两点之间改变颜色的透明箭头?,r,plot,colors,transparent,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.

我可以使用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"))

希望这有帮助

我知道您已经看过Justin引用的另一页了,但我相信如果您发布了一个使用段的可行示例,我们就能够修改它以使用plotrix::color.scale.lines函数。毕竟,arrows函数与segments调用非常相似。

首先,我应该指出,我的答案直接来自评论中提供的信息和DWin的答案。我以前从未见过这些函数,所以我想我应该试一试

我最终创建了一个类似箭头的小功能,只是添加了一个色标。我认为这基本上就是你想要的

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中给出的“结束”颜色相匹配

这个问题与“谢谢”非常相似,我会检查我能用这些答案做些什么。不过,我恐怕这些不是我要找的那种箭。我得到了很多点对,我想用一个类似于arrow函数绘制的箭头来连接它们。我用箭头函数得到的图看起来很好,除了颜色变化…如果你显示你的数据和你当前使用的代码,你就更有可能得到一个好的答案。您可以使用dputyourdata并粘贴它的输出。谢谢,我把我的代码放到现在!希望有帮助!不幸的是,我没有分享数据的权限……按照人们的要求提供可复制的代码是一种比奖金更强烈的激励,想想看。这里的一个关键点是OP是否希望箭头尖端也有梯度,我认为。这是真的。也许他会在他的回答中包括这个细节。如果箭头开始是蓝色的,我希望箭头的尖端是完全红色的…谢谢color.scale.lines函数。我只能让它连接所有的点,但是我只想连接成对的点,我不知道如何将颜色变化应用到箭头…非常感谢!我的R技能还没有发展到那个程度,所以谢谢你们告诉我如何构建这个功能。