【问题标题】:Generate multiple lattice plots on a grid using lapply in R在 R 中使用 lapply 在网格上生成多个格点图
【发布时间】:2013-05-14 13:27:32
【问题描述】:

如何将多个格子图绘制到使用 lapply 函数生成图的单个格子图上?

以下是我迄今为止使用内置的mtcars 数据集进行的尝试的演示。

require(lattice)

response <- c("cyl","disp","hp","drat")

par(mfrow=c(2,2))

lapply(response, function(variable) {
  print(xyplot(mtcars$mpg ~ mtcars[variable]))
})

这会产生所需的图。但是它似乎忽略了par(mfrow=c(2,2)) 指令并分别绘制每个图。

【问题讨论】:

  • lapply 旨在迭代一个应用函数的列表,其中每个返回值都用作返回列表中的一个条目。如果不返回值,for 更合适。
  • 是的。 grid 绘图函数会忽略 par(mfrow=.)。请仔细阅读?Lattice 的帮助页面。

标签: r plot grid-layout lattice lapply


【解决方案1】:

如果你真的不想使用 lattice 的内置 facetting 或 viewport 选项,可以复制par(mfrow) 的行为,如下所示,

require(lattice)

response <- c("cyl","disp","hp","drat")

# save all plots in a list
pl <- lapply(response, function(variable) {
  xyplot(mtcars$mpg ~ mtcars[variable])
})

library(gridExtra)
# arrange them in a 2x2 grid
do.call(grid.arrange, c(pl, nrow=2))

【讨论】:

    【解决方案2】:

    this page 上的 multiplot 功能是我多次使用的功能,可以在一页上获取多个绘图对象。

    【讨论】:

      【解决方案3】:

      您的示例不是 lattice 的用途(grid 更合适)。

      这是lattice 解决方案:

      xyplot(mpg ~ cyl+disp+hp+drat,
             data=mtcars,
             groups=cyl+disp+hp+drat,
             scales=list(relation="free"),
             col="blue"
      )
      

      【讨论】:

      • 我意识到我没有充分利用 lattice。但是,我用于绘图的实际功能非常复杂,并且 lattice 中内置的多面图形功能不足以满足我的目的。然而,网格包确实解决了我的问题。
      猜你喜欢
      • 1970-01-01
      • 2013-02-17
      • 2021-11-13
      • 1970-01-01
      • 1970-01-01
      • 2017-03-01
      • 2014-05-11
      • 2012-02-11
      • 2012-11-06
      相关资源
      最近更新 更多