Как добавить стрелку, используя сетку

Я хочу добавить стрелку, используя 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()

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)

С формой

В своем комментарии@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 пакет.

Другие вопросы по тегам