在R中,如何在一页上显示来自ggplot的多个图形?

6
我想在循环中制作多个ggplot,并将它们显示在一个图表上。
for ( i in 1:8) {
    g <- ggplot(data=mtcars, aes(x=hp, y=wt))+
        geom_point()
    print(g)
}

我想将这些图形排列在一页上,4行2列。有人知道怎么做吗?谢谢。


2
你是否正在寻找 facet_grid 和/或 facet_wrap 功能?请查看以下链接 https://ggplot2.tidyverse.org/reference/facet_grid.html - PKumar
1
请查看cowplotgridExtrapatchwork。如果您正在使用循环,您可能需要创建一个包含您的图形的列表。 - neilfws
2个回答

9
你可以将所有的图表保存在一个 `list` 中,然后使用 `cowplot::plot_grid()` 或 `gridExtra::marrangeGrob()` 将它们放在一个或多个页面中。
另请参见:
- 创建任意图形面板:ggplot2(`patchwork`、`multipanelfigure` 和 `egg` 包) - 循环生成多个图表:Multiple plots in for loop
library(tidyverse)

# create a list with a specific length 
plot_lst <- vector("list", length = 8)

for (i in 1:8) {
  g <- ggplot(data = mtcars, aes(x = hp, y = wt)) +
    geom_point()
  plot_lst[[i]] <- g
}

# Combine all plots
cowplot::plot_grid(plotlist = plot_lst, nrow = 4)

library(gridExtra)
ml1 <- marrangeGrob(plot_lst, nrow = 2, ncol = 2)
ml1

这段内容是由reprex package(版本为v0.2.1.9000)于2018年9月20日创建的。


0
请注意,在您提供的循环中,计数器i在图中没有被引用,因此您最终会打印相同的图形八次!
如果您有一堆不同的单个数据集的子集,并希望将它们布局,您可以遵循@PKumar的评论并查看ggplot2中的facetting。它基本上根据一个或多个列将您的数据分成组,然后将它们放在gridribbon中。
另一方面,如果您有一堆不同的图形要组合在一页上,那么有几个包可以实现这一点:
  • cowplot 是一个相当成熟的包,可以实现这一点,而
  • patchwork 是一个较新的包,可以让您使用算术来布置图形。

希望这些能够帮到您!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接