将箭头放在R中的线条中间

ant*_*mpo 4 plot r arrows

我有一个情节,我从点到点画箭头.我想把这个箭头放在线的末端,而不是中间.有没有一种简单的方法可以做到这一点,除了放置额外的箭头与相应的一半的长度?我的代码是这样的:

plot(x, y, xlim=range(x), ylim=range(y), xlab="x", ylab="y", pch=16,
     main="Filled Plane")

for(i in 1:20){
  arrows(x[i], y[i], x[i+1], y[i+1], length = 0.25, angle = 30, col = i)
}
Run Code Online (Sandbox Code Playgroud)

Dar*_*sai 5

创建一个自定义函数myArrow()并添加一个新参数cut来控制箭头的比例

myArrow <- function(x0, y0, x1, y1, cut = 1, ...){
  x.new <- (1 - cut) * x0 + cut * x1
  y.new <- (1 - cut) * y0 + cut * y1
  # segments(x0, y0, x1, y1, ...)
  arrows(x0, y0, x.new, y.new, ...)
}
Run Code Online (Sandbox Code Playgroud)

注1:此自定义函数的计算x.newy.new使用简单的数学概念,即截面公式.值cut必须介于0到1之间.

注2:arrows()除了它还有一个新参数之外,这个函数的使用等同于原始函数的使用cut.

注3:如果你想要箭头后面的完整行,只需删除#函数中的hash().


绘图并尝试不同的cut价值.例如,我用cut = 0.7.(如果你想将箭头放在中间,请使用cut = 0.5.)

# Toy Data
x <- seq(1, 5.5, by = 0.5)
y <- rep(c(1, 5), 5)

plot(x, y, pch = 16)
for(i in 1:9){
  myArrow(x[i], y[i], x[i+1], y[i+1], cut = 0.7, col = i, lwd = 2)
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述