我在 R 中有以下函数可以绘制改变颜色的箭头:
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)
)
)
}
这个功能我有2个问题..
问题1:箭头向上移动时以红色开始,以蓝色结束,向下移动时以蓝色开始,以红色结束。我实际上需要箭头始终以蓝色开始,并始终以红色结束。这个简化的示例数据说明了这个问题:
# Create sample data 1
x <- c(5,6,5,6)
y <- c(3,5,5,4)
x1 <- c(5,5)
y1 <- c(3,5)
x2 <- c(6,6)
y2 <- c(5,4)
# Plot sample data 1
plot(x,y, main='')
color.scale.arrow(x1,y1,x2,y2,'red','blue',lwd=2)
这创建了以下情节:
问题 2:脚本只允许从左到右的箭头。尝试在另一个方向绘制箭头时,我收到一条错误消息。例如,在绘制此示例数据时:
# Create sample data 2
x <- c(1,3,5,3,2,1,6,2)
y <- c(2,5,3,7,2,1,5,6)
x1 <- c(1,3,5,3)
y1 <- c(2,5,3,7)
x2 <- c(2,1,6,2)
y2 <- c(2,1,5,6)
# Plot sample data 2
plot(x,y, main='')
color.scale.arrow(x1,y1,x2,y2,'red','blue',lwd=2)
我得到以下情节:
以及以下错误消息:
Error in rgb(c(2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, : color intensity 2, not in [0,1]
关于如何解决这些问题的任何想法?提前谢谢了!