如何使用网格包添加箭头

时间:2018-01-12 02:17:29

标签: r plot r-grid

我想使用grid包添加箭头,这将突出显示我的图表的重要部分。我希望箭头在右侧的图片上看起来像。

左边的部分是我的图表,由下面的代码创建,右边的部分是带箭头的图表(我已经使用Paint添加了它)。这是我的目标。

enter image description here

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 个答案:

答案 0 :(得分:4)

您可以使用您拥有的代码,但在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"))

Arrow

另外,跟进@alistaire网格图形的评论有点难以使用。你想要做的事情在基础图形中很容易。

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

Base Graphics

唯一不太完美的是箭头的类型。基础arrows并没有给你很多控制权。如果您不介意添加包,shape包可让您选择箭头样式。

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

With shape

答案 1 :(得分:1)

In his comment,@ 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"))

enter image description here

请注意,ggplot2会重新导出arrow()包中的grid函数。