我有一个情节,我从点到点画箭头.我想把这个箭头放在线的末端,而不是中间.有没有一种简单的方法可以做到这一点,除了放置额外的箭头与相应的一半的长度?我的代码是这样的:
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)
创建一个自定义函数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.new
和y.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)