如何使用网格包添加箭头
How to add arrow using grid package
我想使用 grid
包添加箭头,这将突出显示图表的重要部分。我希望箭头看起来像右边的图片。
左边是我用下面的代码创建的图表,右边是我带箭头的图表(我用画图添加了它)。这是我的目标。
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()
您可以使用已有的代码,但在 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
从 grid
包中重新导出 arrow()
函数。
我想使用 grid
包添加箭头,这将突出显示图表的重要部分。我希望箭头看起来像右边的图片。
左边是我用下面的代码创建的图表,右边是我带箭头的图表(我用画图添加了它)。这是我的目标。
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()
您可以使用已有的代码,但在 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)
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
从 grid
包中重新导出 arrow()
函数。