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