-3

R で arrow() 関数を使用して、色が変化する 2 点間に透明な矢印をプロットできますか? たとえば、ある点で赤から始まり、別の点で徐々に青に変化する矢印 (両方の点がデータフレームの同じ行にあります)? もしそうなら、どのように?そうでない場合、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 に答える