Изменить стрелку стрелки () - PullRequest
24 голосов
/ 20 апреля 2011

Интересно, можно ли изменить стрелку стрелки, нарисованной с помощью arrows(). Я просмотрел документацию, но нашел только то, что могу изменить конец строки, но не стрелку?

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

Любая помощь приветствуется:)

Ответы [ 3 ]

18 голосов
/ 20 апреля 2011

, как описано в ?arrow, вы можете использовать length и angle, чтобы изменить внешний вид стандартных стрелок. С lwd вы можете изменить толщину, как в линиях (). Также 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))
)
15 голосов
/ 10 января 2014

Пакет Карлайн Соетаерт 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)

По умолчанию используется заполненная изогнутая стрелка, на которую приятно смотреть:

enter image description here

Должен любить CRAN!

6 голосов
/ 20 апреля 2011

Если другие ответы не дают вам достаточного контроля над стрелками с помощью функции стрелок, вы можете использовать функцию my.symbols из пакета TeachingDemos. Это позволяет вам создавать свои собственные стрелки и наносить их на график.

Функция 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 для рисования треугольника с изогнутой спиной в качестве стрелки. Точки могут быть изменены, чтобы получить наконечник стрелки другой формы, или другой метод может быть использован для формы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...