R:我怎样画一条有多个箭头的线?
我想知道是否有人能帮我在R中画出带有多个箭头的线条,比如: --->--->--->--->R:我怎样画一条有多个箭头的线?,r,plot,R,Plot,我想知道是否有人能帮我在R中画出带有多个箭头的线条,比如: --->--->--->---> 提前谢谢 正如乔兰所说,箭头 x=cos( seq(0, pi, by=pi/8) ) y=sin( seq(0, pi, by=pi/8)) plot(1,1, ylim=range(y), xlim=range(x)) arrows(x[-length(x)],y[-length(y)], x[-1],y[-1]) 如果要绘制指定长度相等的直多箭头曲线,请使用以下功能: multarro
提前谢谢 正如乔兰所说,
箭头
x=cos( seq(0, pi, by=pi/8) )
y=sin( seq(0, pi, by=pi/8))
plot(1,1, ylim=range(y), xlim=range(x))
arrows(x[-length(x)],y[-length(y)], x[-1],y[-1])
如果要绘制指定长度相等的直多箭头曲线,请使用以下功能:
multarrows <- function(x0,y0, x1,y1,n_arr, ...) {x<- seq(x0,x1, length=n_arr+1)
y<-seq(y0,y1, length=n_arr+1)
arrows(x[-length(x)],y[-length(y)], x[-1],y[-1], ...) }
plot(0,0, xlim=c(0,2), ylim=c(0,11)); multarrows(0,0, 1,10, 10)
multarrowsSimulair to DWin这是我想到的:
arrowLine <- function(x0,y0,x1,y1,nArrow=1,...)
{
lines(c(x0,x1),c(y0,y1),...)
Ax=seq(x0,x1,length=nArrow+1)
Ay=seq(y0,y1,length=nArrow+1)
for (i in 1:nArrow)
{
arrows(Ax[i],Ay[i],Ax[i+1],Ay[i+1],...)
}
}
真正棘手的部分是让箭头指向点的边缘而不是中心。需要吗?根据对原始问题的澄清,我认为应该考虑一个一般性的答案
- 计算由(x,y)点指定的断裂曲线的总长度
- 将中间段分开,以确保箭头之间的曲线长度相等
- 注意一些小细节,如初始“阶段”、终点、箭头后面是否应该有一个小空间等
下面是一个粗略的尝试
arrowLine <- function(x, y, N=10, ...){
lengths <- c(0, sqrt(diff(x)^2 + diff(y)^2))
l <- cumsum(lengths)
tl <- l[length(l)]
el <- seq(0, to=tl, length=N+1)[-1]
plot(x, y, t="l", ...)
for(ii in el){
int <- findInterval(ii, l)
xx <- x[int:(int+1)]
yy <- y[int:(int+1)]
## points(xx,yy, col="grey", cex=0.5)
dx <- diff(xx)
dy <- diff(yy)
new.length <- ii - l[int]
segment.length <- lengths[int+1]
ratio <- new.length / segment.length
xend <- x[int] + ratio * dx
yend <- y[int] + ratio * dy
points(xend,yend, col="white", pch=19)
arrows(x[int], y[int], xend, yend, length=0.1)
}
}
set.seed(123)
x = sort(c(0, runif(200, 0,2* pi), 2*pi))
y=sin(x)
arrowLine(x, y, N=20)
arrowLine有一种不需要绘制一组线段或箭头的方法可以实现这一点。
从上面的x
和y
数据开始:
plot(x, y, t='l')
然后使用一些固定的例程计算从x[1]
,y[1]
到x[2]
,y[2]
等的局部坡度。将坡度转换为角度(以度为单位),然后(调用坡度向量angslopes
)
抱歉,这不起作用,因为据我所知,srt
必须是单个值。因此:
diflen <- length(x)-1
sapply(1:diflen, function(xind) text(x[xind+1], y[xind+1], labels='>', cex=2.5, srt=angslopes[xind]))
diflen我想我应该在这里添加一个基本的R解,将箭头计算为段。有多个版本可用于创建新绘图或向现有绘图添加箭头。较长的段分为较短的段:
添加箭头箭头
,p.箭头
和箭头
都会浮现在脑海中。只有arrows
在base R中,我想不起其他的包,但是谷歌应该很容易找到。这实际上只是画了多个箭头。我希望有一个选项,让你只画一条线与多个箭头在它…谢谢!你的第二个解决方案部分解决了这个问题。但问题是我画了多条不同长度的线,所以使用它可以在箭头之间创建具有不同间距的线,如下所示:。我将尝试找出如何解决这个问题,但我在R方面没有太多经验…第一个解决方案和第二个解决方案的组合应该表明这是可能的。您只需要提供线段的起点和终点,而不是在hte函数中拆分线段。数据!我们需要数据!(多次尝试加载链接图像失败。)谢谢!这在一定程度上起到了作用。但问题是,我画了多条不同长度的线,因此使用它可以在箭头之间创建具有不同间距的线,如下图所示:@David从我当时过于仓促的笔记中可以回忆到,mang
与angslopes
相同。很抱歉
text(x, y, labels=">", srt=angslopes) # throws error
diflen <- length(x)-1
sapply(1:diflen, function(xind) text(x[xind+1], y[xind+1], labels='>', cex=2.5, srt=angslopes[xind]))
plot_arrows <- function(x, y, ...)
{
plot(x, y, col = "white", ...)
add_arrows(x, y, ...)
}
set.seed(69)
x <- 1:10
y <- sample(10)
plot(x, y)
add_arrows(x, y)