Как добавить стрелку с помощью пакета сетки

Я хочу добавить стрелку, используя пакет grid, который выделит важную часть моей диаграммы. Я хочу, чтобы стрелка выглядела как на картинке справа.

В левой части моя диаграмма, созданная с помощью приведенного ниже кода, а в правой части моя диаграмма со стрелкой (я добавил ее с помощью Paint). Это моя цель.

введите здесь описание изображения

library(grid)
library(lattice)
library(sandwich)

data("Investment")
Investment <- as.data.frame(Investment)

pushViewport(plotViewport(c(5, 4, 2, 2)))
pushViewport(dataViewport(Investment$Investment, 
                      Investment$GNP,
                      name="Zaleznosc Investment od GNP"))

grid.points(Investment$Investment, Investment$GNP, gp=gpar(cex=0.5))

grid.rect()
grid.xaxis()
grid.yaxis()
grid.text("Investment", y=unit(-3, "line"))
grid.text("GNP", x=unit(-3, "line"), rot=90)
popViewport()

person Viola    schedule 12.01.2018    source источник
comment
arrow из сетки, но работа непосредственно в сетке кажется излишне сложным способом графического отображения вещей теперь, когда существует ggplot2.   -  person alistaire    schedule 12.01.2018


Ответы (2)


Вы можете использовать код, который у вас есть, но перед popViewport() добавьте код, чтобы добавить свою стрелку.

grid.lines(x = unit(c(0.42, 0.74), "npc"),
          y = unit(c(0.8, 0.86), "npc"),
        gp = gpar(fill="black"),
          arrow = arrow(length = unit(0.2, "inches"), 
            ends="last", type="closed"))

Стрелка

Кроме того, чтобы следить за комментарием к сетке @alistaire, немного сложно использовать. То, что вы пытаетесь сделать, в основном легко в базовой графике.

plot(GNP ~ Investment, data=Investment)
arrows(250, 2600, 380, 2750, code = 2, lwd=2)

Базовая графика

Единственное, что не совсем идеально, так это тип наконечника стрелы. База arrows не дает вам большого контроля над этим. Если вы не возражаете против добавления пакета, пакет shape позволяет выбрать стиль стрелки.

library(shape)
plot(GNP ~ Investment, data=Investment)
Arrows(250, 2600, 380, 2750, code = 2, 
    arr.type="triangle", arr.width=0.4)

С формой

person G5W    schedule 12.01.2018

В своем комментарии @alistaire упомянул ggplot2 в качестве альтернативы работать с grid напрямую.

Для полноты картины вот версия ggplot2, в которой используется функция annotate() для размещения стрелки на графике.

data(Investment, package = "sandwich")

library(ggplot2)
ggplot(as.data.frame(Investment)) +
  aes(Investment, GNP) +
  geom_point(shape = 1L) +
  theme_bw() +
  annotate("segment", x = 250, xend = 380, y = 2600, yend = 2800, 
           arrow = arrow(length = unit(0.2, "inches"), ends = "last", type = "closed"))

введите здесь описание изображения

Обратите внимание, что ggplot2 реэкспортирует функцию arrow() из пакета grid.

person Uwe    schedule 12.01.2018