Изменить наконечник стрелок()

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

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

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


person Sarah West    schedule 20.04.2011    source источник
comment
На что вы хотите изменить стрелку?   -  person Gavin Simpson    schedule 20.04.2011
comment
Например: я хотел, чтобы наконечник был сплошным, а не открытым. В приведенном ниже примере я достиг этого, выполнив lwd=8 и сократив длину стрелки.   -  person Sarah West    schedule 20.04.2011
comment
подозревал столько же; базовые графические стрелки не допускают легкой модификации, кроме упомянутых вами обходных путей. Графика решетки имеет panel.arrows(), который принимает аргумент type, где можно указать "open" или "closed", если вам когда-либо понадобятся графики решетки. Жаль, что этой функции нет в базе arrows().   -  person Gavin Simpson    schedule 20.04.2011


Ответы (3)


как описано в ?arrow , вы можете использовать length и angle для изменения внешнего вида стандартных стрелок. С помощью 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))
)
person Joris Meys    schedule 20.04.2011
comment
Спасибо, я думаю, что неправильно понял документацию. Спасибо за предоставленный пример кода. - person Sarah West; 20.04.2011
comment
@Sarah: вы также можете поиграть, например. lwd для изменения толщины линий. См. адаптированный код. - person Joris Meys; 20.04.2011
comment
Добавление этих примеров того, как использовать длину, угол и lwd, может быть полезным патчем для ?arrows. Не могли бы вы представить патч? - person Joshua Ulrich; 20.04.2011
comment
Спасибо, как я прокомментировал выше, я создал цельный наконечник стрелки с lwd=8 и более короткой длиной наконечника стрелки. - person Sarah West; 20.04.2011

Пакет 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!

person Andy Barbour    schedule 10.01.2014
comment
Вы не знаете, можно ли случайно использовать эти стрелки на графиках ggplot2? - person Tom Wenseleers; 04.08.2015
comment
это, кажется, ломается в logplots - person Nidish Narayanaa; 28.02.2018

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

person Greg Snow    schedule 20.04.2011
comment
Можете ли вы добавить образец того, как это использовать? - person retorquere; 02.11.2018
comment
@retorquere, я добавил один пример. - person Greg Snow; 02.11.2018