如@Roland在评论中解释的那样,只绘制了一个箭头,因为当绘制a时,仅评估
geom_segment(arrow=arrow(), mapping = aes(x=b[i,1],y=b[i,2],xend=b[i,3],yend=b[i,4]))
。但是每次绘制a时,i只有一个值。在循环的第一次通过期间,
i=1
,在第二次通过期间,
i=2
。循环结束后,
i
仍然等于2。因此,每次仅绘制一个箭头。如果在循环后运行
i=1:2
,则会得到两个箭头。另一方面,如果将
i
更改为除1和/或2以外的任何内容,则不会绘制任何箭头。
无论如何,您可以按以下方式在没有循环的情况下获得两个箭头:
ggplot(mtcars, aes(wt, mpg)) +
geom_point() +
geom_segment(data=b, arrow=arrow(), aes(x=x1,y=y1,xend=x2,yend=y2))
@Roland第一条评论的问题:在每次循环中,是否应该通过添加新的geom_segment来更新对象a
?例如,如果我从OP的原始a
开始,那么经过一次循环后,
a = a + geom_segment(arrow=arrow(), aes(x=b[1,1],y=b[1,2],xend=b[1,3],yend=b[1,4]))
然后,在循环的两次迭代之后,
a = a + geom_segment(arrow=arrow(), aes(x=b[1,1],y=b[1,2],xend=b[1,3],yend=b[1,4])) +
geom_segment(arrow=arrow(), aes(x=b[2,1],y=b[2,2],xend=b[2,3],yend=b[2,4]))
在每种情况下,
a
指的是循环开始前的值。那么,无论何时或是否评估
a
,对象
a
的底层更改不应该发生吗?