1

我想将子文本 (a textGrob) 添加到 a grid Viewport-- 这可能吗?

我已经弄清楚如何将子文本添加到单个图表:

require(ggplot2) 
require(gridExtra)

# make the data
timeSeries <- data.frame(date = seq(as.Date("2001-01-01"), as.Date("2012-01-01"), by = "mon"), 
                     value = 1:133 + rnorm(133, 0, 10)
                     )


# make the ggplots
gpLine <- ggplot(timeSeries, aes(x = date, y = value)) +
                geom_line()

gpBar <- ggplot(timeSeries, aes(x = date, y = value)) +
                geom_bar(stat = 'identity')

# ggplot + subtext
grid.arrange(gpBar, sub = textGrob("why is this at the bottom?"))

...而且我可以使用grid Viewport

# two plots, one view
vplayout <- function(x,y) viewport(layout.pos.row = x, layout.pos.col = y)

pushViewport(viewport(layout = grid.layout(3,1)))
print(gpLine, vp = vplayout(1:2, 1))
print(gpBar, vp = vplayout(3, 1))

...但我不知道如何将文本添加到结果视口的底部。

Grid如此完整我敢肯定一定有办法,但它对我来说是隐藏的。

4

3 回答 3

3

你非常接近:

popViewport() # brings you to the top viewport for the whole plotting area
grid.text("Hello Vicar", x = unit(0.5, "npc"), y = unit(0.25, "npc"))

在上面的所有命令之后。

于 2013-05-02T11:01:09.303 回答
3

也许我错过了一些东西,因为我会简单地执行以下操作,

grid.arrange(gpLine, gpBar, heights = c(2/3, 1/3), 
     bottom = textGrob("this is my signature", x=1, hjust=1, vjust=0))

在此处输入图像描述

编辑(2015 年 7 月 23 日):从 gridExtrasub的 v>=2.0.0 开始,为了bottom保持一致性,参数已从 更改为

于 2013-05-04T14:05:28.253 回答
0

在当前版本的 ggplot2 中,gridExtra::grid.arrange不需要使用:

p <- ggplot(...) + labs(caption = 'text at the bottom')

成功了。

于 2018-03-02T03:59:53.343 回答