在R的情节区域外添加脚注引用?

时间:2012-04-17 19:22:26

标签: r ggplot2 annotations r-grid

我想在R中制作的3面板小平面网格图中添加一个脚注引用。这是一个信用数据源的脚注。理想情况下,我希望它位于所有三个轴的下方和外部 - 最好是在左下方。

我正在使用ggplot2ggsave()。这意味着我无法使用基于grid.text()的解决方案,因为它只会在x11()窗口上绘制,并且无法添加到ggplot对象中。

使用而不是png() ...code... dev.off()似乎不是一个选项,因为我需要ggsave调整参数大小,并且发现此命令会产生更好,更清晰的打印(这也更快,因为我是不打印到屏幕上。)

这是我的基本代码:

p1 <- ggplot(data, aes(date, value))
    facet_grid(variable ~ .) + geom_point(aes(y =value), size=1) + 
    theme_bw() +
        opts(title=mytitle)
print(p1)
ggsave("FILE.png",width=mywidth, height=myheight, p1, dpi=90)

我试过了:

p1 <- ggplot(data, aes(date, value))
    facet_grid(variable ~ .) + geom_point(aes(y =value), size=1) + 
    theme_bw() +
        opts(title=mytitle)
print(p1)
grid.text(unit(0.1,"npc"),0.025,label = "Data courtesy of Me")
grid.gedit("GRID.text", gp=gpar(fontsize=7))
ggsave("FILE.png",width=mywidth, height=myheight, p1, dpi=90)

这适当地将脚注放在x11()显示的左下角,在图表外部,但不幸的是,因为它没有应用于p1对象,所以ggsave命令不会保存它。 / p>

我也试过了:

p1 <- ggplot(data, aes(date, value))
    facet_grid(variable ~ .) + geom_point(aes(y =value), size=1) + 
    theme_bw() +
    opts(title=mytitle) +
annotate("text", label = "Footnote", x = 0, y = 10, size = 5, colour = "black") +
print(p1)
ggsave("FILE.png",width=mywidth, height=myheight, p1, dpi=90)

使用ggsave成功打印,但它有以下问题:

  • 在3个方面中的每个方面重复3次,而不是1次。
  • 它包含在图中,而不是在图外部。
  • 文本难以放置---似乎是使用绘图单位(我的x轴是日期,因此0将其置于1970年左右)。
  • 尽管我的尺码参数,文字大小似乎没有变化。

我在探讨这个问题时的几个相关链接......

3 个答案:

答案 0 :(得分:35)

ggplot2现在具有此功能,无需额外的包。 ... + labs(caption = "footnote", ...)

library(ggplot2) 
ggplot(diamonds, aes(carat, price, color = clarity)) + 
  geom_point() + 
  labs(title = "Diamonds are forever...", 
       subtitle = "Carat weight by Price", 
       caption = "H. Wickham. ggplot2: Elegant Graphics for Data Analysis Springer-Verlag New York, 2009.")

enter image description here

答案 1 :(得分:31)

library(gridExtra)
library(grid)
library(ggplot2)

g <- grid.arrange(qplot(1:10, 1:10, colour=1:10) + labs(caption="ggplot2 caption"), 
              bottom = textGrob("grid caption", x = 1, 
                                hjust = 1, gp = gpar(fontface = 3L, fontsize = 9)))
ggsave("plot.pdf", g)

enter image description here

编辑:请注意,这个解决方案与添加到ggplot2的最近的标题参数有些互补,因为textGrob在这里可以与整个图形对齐,而不仅仅是绘图面板。

答案 2 :(得分:5)

添加到Brandon Bertelsen的答案:如果你想在左下角加上标题,请添加

theme(plot.caption = element_text(hjust = 0))