将箭头放在R中线的中间
Placing arrow heads to the middle of the lines in R
我有一个情节,我在其中绘制点与点之间的箭头。我不想把这个箭头放在行尾,而是放在中间。除了在相应行的一半长度上放置额外的箭头之外,是否有一种简单的方法可以做到这一点?
我的代码是这样的:
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)
}
由于你没有提供你的x和y,我补了一些数据。不需要循环。 arrows
将处理坐标向量。一种方法是绘制一个没有箭头的全长箭头,另一种方法刚好画到一半但有箭头。
## Some bogus data
set.seed(123)
x = runif(4)
y = runif(4)
## Compute the midpoints
midx = diff(x)/2 + x[-length(x)]
midy = diff(y)/2 + y[-length(y)]
## Draw it
plot(x,y,xlim=range(x), ylim=range(y), xlab="x", ylab="y",
main="Filled Plane",pch=16)
arrows(x[-length(x)], y[-length(y)],x[-1],y[-1],
angle = 0, col = 1:3)
arrows(x[-length(x)], y[-length(y)],midx,midy,
length = 0.25, angle = 30, col = 1:3)
创建一个自定义函数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, ...)
}
Note1 :这个自定义函数中x.new
和y.new
的计算使用了一个简单的数学概念,即截面公式。 cut
的值必须在0到1之间.
注2 :除了多了一个新的参数cut
之外,这个函数的用法等同于原来的函数arrows()
。
注3:如果你想要箭头后面的完整行,只需删除函数中的哈希(#
)即可。
绘制并尝试不同的 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)
}
我有一个情节,我在其中绘制点与点之间的箭头。我不想把这个箭头放在行尾,而是放在中间。除了在相应行的一半长度上放置额外的箭头之外,是否有一种简单的方法可以做到这一点? 我的代码是这样的:
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)
}
由于你没有提供你的x和y,我补了一些数据。不需要循环。 arrows
将处理坐标向量。一种方法是绘制一个没有箭头的全长箭头,另一种方法刚好画到一半但有箭头。
## Some bogus data
set.seed(123)
x = runif(4)
y = runif(4)
## Compute the midpoints
midx = diff(x)/2 + x[-length(x)]
midy = diff(y)/2 + y[-length(y)]
## Draw it
plot(x,y,xlim=range(x), ylim=range(y), xlab="x", ylab="y",
main="Filled Plane",pch=16)
arrows(x[-length(x)], y[-length(y)],x[-1],y[-1],
angle = 0, col = 1:3)
arrows(x[-length(x)], y[-length(y)],midx,midy,
length = 0.25, angle = 30, col = 1:3)
创建一个自定义函数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, ...)
}
Note1 :这个自定义函数中x.new
和y.new
的计算使用了一个简单的数学概念,即截面公式。 cut
的值必须在0到1之间.
注2 :除了多了一个新的参数cut
之外,这个函数的用法等同于原来的函数arrows()
。
注3:如果你想要箭头后面的完整行,只需删除函数中的哈希(#
)即可。
绘制并尝试不同的 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)
}