【问题标题】:Multiple plots on one page using ggplot使用ggplot在一页上绘制多个图
【发布时间】:2016-02-19 11:56:23
【问题描述】:

我有 12 个由循环生成的图,我想在一页上用 3 行和 2 列绘制它们(总共 2 页)。我知道如何在 R 中做到这一点

pdf("1.pdf")
par(mfrow = c(3, 2))
for (i in 1:12) {
  x <- 1:10
  y <- 2*x + rnorm(x)
  plot(x, y)
}
dev.off()

但是如何使用ggplot 做到这一点?

library(ggplot2)
library(grid)
library(gridExtra)
for (i in 1:12) {
  x <- 1:10
  y <- 2*x + rnorm(x)
  qplot(x, y)
}

我想我必须使用grid.arrange,但需要一些帮助。谢谢。

【问题讨论】:

  • 检查this是否有用

标签: r plot ggplot2 gridextra


【解决方案1】:

您可能想看看cowplot 包,它比仅使用裸grid.arrange 具有更大的灵活性。

这行得通——尽管有点不雅:

library(ggplot2)
library(grid)
library(gridExtra)
lg <- list()
for (i in 1:12) {
  x <- 1:10
  y <- 2*x + rnorm(x)
  lg[[i]] <- qplot(x, y)
}
grid.arrange(lg[[1]],lg[[2]],lg[[3]],lg[[4]],lg[[5]],lg[[6]],nrow=3,ncol=2)
grid.arrange(lg[[7]],lg[[8]],lg[[9]],lg[[10]],lg[[11]],lg[[12]],nrow=3,ncol=2)

下面是另一种更优雅但有点迟钝的方法来执行grid.arrange(感谢 Axeman 和甜菜根 - 请注意 cmets)。

do.call(grid.arrange, c(lg[1:6], nrow = 3))
do.call(grid.arrange, c(lg[7:12], nrow = 3))

或者这个:

grid.arrange(grobs = lg[1:6], ncol=2)
grid.arrange(grobs = lg[7:12], ncol=2)

它们都导致了这个——(想想其中两个——无论如何它们看起来都一样):

【讨论】:

  • 你可以做do.call(grid.arrange, c(lg[1:6], nrow = 3))do.call(grid.arrange, c(lg[7:12], nrow = 3))
  • s。 here 关于 grid.arrange 使用列表:grid.arrange(grobs = lg[1:6], ncol=2)
  • 我也觉得他可能更喜欢cowplot
  • 好的,谢谢@Axeman 和甜菜根。我很惊讶我把它放在那里,它在我注意到它之前挂了 26 分钟。 :) 我会将它们添加为 cmets,因为我认为它的方式更具说教性。
【解决方案2】:

marrangeGrob 是多个页面的便捷包装器,

marrangeGrob(lg, ncol=2, nrow=3)

或者您可以两次显式调用grid.arrange()

grid.arrange(grobs = lg[1:6], ncol=2)
grid.arrange(grobs = lg[7:12], ncol=2)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多