【问题标题】:Change arrowhead of arrows()更改箭头的箭头()
【发布时间】:2011-04-20 13:50:44
【问题描述】:

我想知道是否可以更改用arrows() 绘制的箭头的箭头。我查看了文档,但我发现我可以更改行尾但不能更改箭头?

plot(c(1:10))
arrows(0,0,10,10)

任何帮助表示赞赏:)

【问题讨论】:

  • 你想把箭头改成什么?
  • 例如:我希望箭头是实心的而不是开放式的。在下面的示例中,我通过执行 lwd=8 并缩短箭头的长度来达到此目的。
  • 怀疑同样多;基本图形箭头不允许轻松修改,除了您提到的解决方法。格子图形有panel.arrows(),它接受type 参数,如果您需要格子图,可以指定"open""closed"。遗憾的是,此功能不在基础 arrows() 中。

标签: r plot


【解决方案1】:

?arrow 中所述,您可以使用lengthangle 更改标准箭头的外观。使用lwd,您可以更改粗细,就像在lines() 中一样。 lty 也有效,尽管结果通常不是很好。

一整套例子:

plot(c(0:10),type="n")

arrows(1,0,2,1,length=0.2,angle=20)
arrows(1,1,2,2,length=0.1,angle=40,lwd=3)

invisible(mapply(arrows,
        rep(c(3,6),each=4),rep(3:6,2),
        rep(c(5,8),each=4),rep(5:8,2),
        angle=seq(10,40,length.out=8),
        length=rep(seq(0.1,0.3,length.out=4),2),
        lwd=rep(1:4,each=2))
)

【讨论】:

  • 谢谢,我想我误解了文档。感谢您提供示例代码。
  • @Sarah :你也可以玩例如。 lwd 更改线条的粗细。请参阅改编代码。
  • 添加这些关于如何使用长度、角度和 lwd 的示例可能是对?arrows 的有用补丁。你会考虑提交补丁吗?
  • 谢谢,正如我在上面评论的那样,我创建了一个带有 lwd=8 和较短长度的实心箭头。
【解决方案2】:

Karline Soetaert 的包 shape 可用于此目的:

library(shape)
plot(c(0,2),c(-2,2), col=NA)
Arrows(c(0,1.7),c(1.3,-1.8),c(0.8,1.1),c(1.2,-1), lwd=2)

默认是填充的弯曲箭头,看起来很舒服:

一定要爱 CRAN!

【讨论】:

  • 你知道这些箭头是否也可以在 ggplot2 图中使用吗?
  • 这似乎在日志图中中断
【解决方案3】:

如果其他答案不能让您使用箭头函数对箭头进行足够的控制,您可以使用 TeachingDemos 包中的函数 my.symbols。这允许您创建自己的自定义箭头并绘制它们。

函数ms.arrows,在同一个包中,显示了这样做的一种方法:你可以修改那个函数(或其他ms.*函数)来创建你想要的任何类型的箭头,然后使用my.symbols来绘制它们。

编辑

这是一个应要求的示例:

library(TeachingDemos)

ms.arrowhead <- function(angle, ...) {
  xy <- cbind( c(-1, -0.75, -1, 0), 
               c(-0.5, 0, 0.5, 0) )
  xy <- xy %*% matrix(c(cos(angle),-sin(angle),sin(angle),cos(angle)), 2)
  xspline(xy, shape=c(0, -1, 0, 0), open=FALSE, ...)
}

plot(1:10, 1:10)
my.symbols(1:10, 1:10, ms.arrows, angle=seq(pi, 0, length=10),
           col='blue', adj=1, length=0, symb.plots=TRUE)
my.symbols(1:10, 1:10, ms.arrowhead, angle= seq(pi, 0, length=10), 
           col='green', inches=0.5, lwd=2, symb.plots = TRUE)

这使用xspline 函数来绘制一个以弯曲的背部作为箭头的三角形。可以修改这些点以获得不同形状的箭头,或者可以使用其他方法来获得形状。

【讨论】:

  • 你能添加一个如何使用它的示例吗?
  • @retorquere,我添加了一个例子。
猜你喜欢
  • 2018-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多